【JAVA基础之时间API】自定义时间格式

 🔥作者主页:小林同学的学习笔录

🔥mysql专栏:小林同学的专栏

目录

1.Date类

1.1  概述

1.2  构造方法

1.3  常用方法       

2.SimpleDateFormat类

2.1  概述

2.2  构造方法

2.3  格式规则

2.4  常用方法

3.Calendar类

3.1  概述

3.2  常用方法

4.JDK8时间相关类


1.Date类

1.1  概述

Java的Date类是用来表示特定时间点的类。它位于java.util包中,是Java早期日期和时间处理的一部分。Date类的实例表示自1970年1月1日00:00:00 GMT以来的毫秒数。

在Java 8及更高版本中,推荐使用java.time包中的新日期和时间API,如LocalDateLocalTimeLocalDateTime,因为它们提供了更丰富和更方便的功能。

缺点:

  • Date对象是可变的,这意味着一旦创建,它的值可以被改变。这可能导致并发问题,线程不安全
  • Date类使用的时区是GMT,这可能导致在处理不同时区的应用程序时出现问题

1.2  构造方法

  • Date(): 创建表示当前时间的 Date 对象,从1970年1月1日00:00:00 GMT开始。

  • Date(long date): 创建一个表示从1970年1月1日00:00:00 GMT开始经过指定毫秒数的 Date 对象。

1.3  常用方法       

Date类中的多数方法已经过时,常用的方法有:

  • public long getTime() 把日期对象转换成对应的时间毫秒值,得到的是GMT到现在的毫秒数。

  • public void setTime(long time) 参数给定的毫秒值设置给日期对象,传参需要单位毫秒。

  • before(Date when): 检查当前日期是否在指定日期之前。

  • after(Date when): 检查当前日期是否在指定日期之后。

小结:Date表示特定的时间瞬间,我们可以使用Date对象对时间进行操作。

代码演示:

public class Demo01 {
    public static void main(String[] args) {
        Date date = new Date();
        long time = date.getTime();
        System.out.println(time);
        
        long customTime = 1620462871000L; // 表示2021年5月8日12:34:31
        //currentDate 对象的时间将被设置为2021年5月8日12:34:31的时间。
        date.setTime(customTime);
        long time1 = date.getTime();
        System.out.println(time1);
    }
}

输出结果:

1715160825915
1620462871000

2.SimpleDateFormat类

2.1  概述

java.text.SimpleDateFormat 是日期/时间格式化类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

  • 格式化:按照指定的格式,把Date对象转换为String对象。

  • 解析:按照指定的格式,把String对象转换为Date对象。

2.2  构造方法

由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:

  • public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。

  • public SimpleDateFormat():无参构造器,按默认格式输出时间格式

2.3  格式规则

  • yyyy:四位数的年份(例如:2024)
  • yy:两位数的年份(例如:24,对应2024)
  • MM:两位数的月份(01表示一月,12表示十二月)
  • M:一位或两位数的月份(1表示一月,12表示十二月)
  • dd:两位数的日期(01到31)
  • d:一位或两位数的日期(1到31)
  • HH:两位数的小时数,使用24小时制(00到23)
  • H:一位或两位数的小时数,使用24小时制(0到23)
  • hh:两位数的小时数,使用12小时制(01到12)
  • h:一位或两位数的小时数,使用12小时制(1到12)
  • mm:两位数的分钟数(00到59)
  • m:一位或两位数的分钟数(0到59)
  • ss:两位数的秒数(00到59)
  • E:星期几的简写(例如:Sun、Mon、Tue等)
  • EE:星期几的长名(例如:Sunday、Monday、Tuesday等)

2.4  常用方法

DateFormat类的常用方法有:

  • public String format(Date date):将Date对象格式化为字符串。

  • public Date parse(String source):将字符串解析为Date对象。

拓展:

String formattedDate = sdf.format(new Date());这句代码new Date()得到的是一个毫秒数,底层做了什么变成指定格式?

当调用new Date()时,会创建一个Date对象,代表当前的日期和时间,以毫秒数的形式存储。然后在调用format()方法时,SimpleDateFormat类会将这个毫秒数转换为指定格式的日期字符串。在内部,SimpleDateFormat类会根据指定的日期格式,将毫秒数转换为年、月、日、时、分、秒等不同的时间单位,然后拼接成最终的格式化日期字符串。所以,实际上是SimpleDateFormat在底层根据指定的格式使用Date对象中的毫秒数进行计算和格式化,从而得到最终的格式化日期字符串。

代码演示:

public class Demo01 {
    public static void main(String[] args) {

        // 使用指定的日期格式创建SimpleDateFormat对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 格式化当前日期
        String formattedDate = sdf.format(new Date());
        System.out.println("Formatted date: " + formattedDate);

        // 将字符串解析为日期对象
        String strDate = "2022-01-01 12:00:00";
        try {
            Date parsedDate = sdf.parse(strDate);
            System.out.println("Parsed date: " + parsedDate);
        } catch (Exception e) {
            System.out.println("Error parsing date: " + e.getMessage());
        }
    }
}

输出结果:

Formatted date: 2024-05-08 20:46:20
Parsed date: Sat Jan 01 12:00:00 CST 2022

3.Calendar类

3.1  概述

Calendar类是Java中用于操作日期和时间的类,它提供了一种处理日期和时间的方式,使得可以方便地进行日期和时间的计算、比较以及格式化。Calendar类是一个抽象类,因此不能直接实例化,通常通过getInstance()方法获取Calendar对象的实例。

3.2  常用方法

代码演示:

get演示

public class Demo01 {
    public static void main(String[] args) {
        //1.获取一个GregorianCalendar对象
        Calendar instance = Calendar.getInstance();//获取子类对象

        //2.打印子类对象
        System.out.println(instance);

        //3.获取属性
        int year = instance.get(Calendar.YEAR);
        int month = instance.get(Calendar.MONTH) + 1;//Calendar的月份值是0-11
        int day = instance.get(Calendar.DAY_OF_MONTH);

        int hour = instance.get(Calendar.HOUR);
        int minute = instance.get(Calendar.MINUTE);
        int second = instance.get(Calendar.SECOND);

        int week = instance.get(Calendar.DAY_OF_WEEK);//返回值范围:1--7,分别表示:"星期日","星期一","星期二",...,"星期六"

        System.out.println(year + "年" + month + "月" + day + "日" +
                hour + ":" + minute + ":" + second);
    }
}

set演示

public class Demo02 {
    public static void main(String[] args) {
        //设置属性——set(int field,int value):
        Calendar c1 = Calendar.getInstance();//获取当前日期

        //计算班长出生那天是星期几(假如班长出生日期为:1998年3月18日)
        c1.set(Calendar.YEAR, 1998);
        c1.set(Calendar.MONTH, 3 - 1);//转换为Calendar内部的月份值
        c1.set(Calendar.DAY_OF_MONTH, 18);

        int w = c1.get(Calendar.DAY_OF_WEEK);
        System.out.println(w);
    }
}

add演示

public class Demo03 {
    public static void main(String[] args) {
        //计算200天以后是哪年哪月哪日,星期几?
        Calendar c2 = Calendar.getInstance();//获取当前日期
        c2.add(Calendar.DAY_OF_MONTH, 200);//日期加200

        int y = c2.get(Calendar.YEAR);
        int m = c2.get(Calendar.MONTH) + 1;//转换为实际的月份
        int d = c2.get(Calendar.DAY_OF_MONTH);

        int wk = c2.get(Calendar.DAY_OF_WEEK);
        System.out.println("200天后是:" + y + "年" + m + "月" + d + "日" + "星期" + wk);
    }
}

4.JDK8时间相关类

一般时间可以用LocalDateTime类来自定义格式

用法:

public class Demo01 {
    public static void main(String[] args) {
        //1. 使用 now() 返回表示当前日期时间的 对象
        LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now() System.out.println(ldt);

        //2. 使用 DateTimeFormatter 对象来进行格式化
        // 创建 DateTimeFormatter 对象
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        //把LocalDateTime对象转换为字符串
        String format = dateTimeFormatter.format(ldt);
        System.out.println("格式化的日期= " + format);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/604328.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法】滑动窗口——将x减到0的最小操作数

本节博客主要是讲的我解“将x减到0的最小操作数”这道题的思路历程,从最开始的想法到代码提交的详细记录,有需要借鉴即可。 目录 1.题目2.代码示例3.细节3.1left越界3.2特殊情况 4.总结 1.题目 题目链接:LINK 看题目意思是就是给你一个数X&…

C++贪心算法

关于string的系统函数! (注:以下函数只可用于string,不适用其他类型的变量) ① a.size(); 这个系统函数是用来获取这个string变量的长度的,我们通常会新建一个变量来保存他,以便之后使用。 …

在java类前添加上文档注释

第一步: 第二步 第三步 将下面代码粘上 /** *Author Lnn *Date ${DATE}/${TIME} *ClassName ${NAME} *Description */

ios苹果App上架到应用商店的操作流程

哈喽,大家好呀,淼淼又来和大家见面啦,发现最近有许多想要上架App的小伙伴,但是又不知道要怎么操作,对于开发者而言,将精心打造的iOS应用程序成功上架到苹果的 App Store 是向全球用户展示咱们的产品和服务的…

《动手学深度学习》预备知识和安装环境

哈喽,欢迎来到自学深度学习小白的文章,本文将介绍anacoda是什么和有什么用,以及在win10环境下如何安装运行环境。 关于anaconda 1.环境 准备开始写代码了,教材总是先叫你配好环境,环境可以堪称一栋房子,…

MindSponge分子动力学模拟——软件架构

技术背景 在前面一篇文章中,我们介绍了MindSponge的两种不同的安装与使用方法,让大家能够上手使用。这篇文章主要讲解MindSponge的软件架构,并且协同mindscience仓库讲解一下二者的区别。 整体架构 首先我们来了解一下MindSponge独立仓库的…

Baidu Comate智能编码助手:提升软件生产力的高效工具使用教程

目录 一、前言 二、Comate助手概览 三、核心功能详解 智能推荐与自动补全 生成单元测试 代码注释生成 四、使用场景与优势 五、总结与展望 一、前言 随着信息技术的飞速发展,编程已经成为许多行业不可或缺的一部分。然而,编程过程中的繁琐和重复…

基于51单片机交通灯设计—汇编语言

基于51单片机的交通灯设计 (仿真+程序设计报告) 功能介绍 具体功能: 1.南北方向绿灯20s(最后3s闪烁)后转黄灯常亮5s,同时东西方向红灯25秒;东西方向绿灯20s(最后3s闪烁…

【三】DRF序列化进阶

序列化器的定义与使用 多表关联序列化 【1】准备工作 # settings.py DATABASES {default: {# 数据库引擎选择使用MySQLENGINE: django.db.backends.mysql,# 指定数据库名字,需提前创建NAME: books,# 指定数据库用户名USER: root,# 指定数据库用户密码PASSWORD: …

Redis 主从复制 初步认识

文章目录 定义拓扑拓扑定义单从拓扑多从拓扑树型拓扑 使用原理建立流程持续复制 定义 Redis主从复制技术的主要满足的需求是①数据恢复②负载均衡 ①数据恢复的理解:将数据同步到多个Redis服务器中,其中一个节点数据损毁,可通过复制其他节点…

FreeRTOS学习笔记-基于stm32(6)时间片调度实验

1、什么是时间片调度 在任务优先级相同的时候,CPU会轮流使用相同的时间去执行它,即时间片调度。这个相同的时间就是时间片。而时间片的大小就是SysTick的中断周期(SysTick的中断周期可以修改)。 比如有三个相同优先级的任务在运行…

一张贴纸50万,炒房炒币的怎么都来炒CSGO皮肤了

一张贴纸50万,为什么炒房炒币的都来炒CSGO饰品了? 一张贴纸50万,炒房炒币的怎么都来炒CSGO皮肤了? 经常有人问我,天天看你们买卖装备,买卖皮肤,说到底这都是虚拟产品,看得见摸不着的…

ue引擎游戏开发笔记(35)——为射击添加轨道,并显示落点

1.需求分析: 我们只添加了开枪特效,事实上并没有实际的效果产生例如弹痕,落点等等。所以逐步实现射击的完整化,先从实现落点开始。 2.操作实现: 1.思路:可以这样理解,每次射击的过程是一次由摄…

二层交换机与防火墙连通上网实验

防火墙是一种网络安全设备,用于监控和控制网络流量。它可以帮助防止未经授权的访问,保护网络免受攻击和恶意软件感染。防火墙可以根据预定义的规则过滤流量,例如允许或阻止特定IP地址或端口的流量。它也可以检测和阻止恶意软件、病毒和其他威…

Ansible-playbook剧本

目录 一、Ansible playbook简介 2.1 playbook格式 2.2 playbook组成部分 二、playbook示例 2.1 yaml文件编写 2.2 运行playbook 2.3 定义、引用变量 2.4 指定远程主机sudo切换用户 2.5 when条件判断 2.6 迭代 三、总结 Ansible中使用playbook脚本的作用和好处 一、A…

5月8日学习记录

_[FBCTF2019]RCEService(preg_match函数的绕过) 涉及知识点:preg_match函数绕过,json的格式,正则回溯 打开环境,要求用json的格式输入 搜索学习一下json的语法规则 数组(Array)用方括…

OpenMV 图像串口传输示例

注意:本程序根据 OpenMV采集图片通过串口发送,PC接收并保存为图片 更改。 一、例程说明 这个例程主要实现了以下功能: 1. OpenMV 端采集图像:使用OpenMV开发板上的摄像头采集实时图像数据。 2. 通过串口传输图像数据:将采集到的图像数据打包成字节流,…

智慧工地的5大系统是什么?SaaS化大型微服务架构(智慧工地云平台源码)可多端展示登录

智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合,为工程项目管理提供先进技术手段,构建工地现场智能监控和控制体系,弥补传统方法在监管中的缺陷,最终实现项目对人、机、料、法、环的全…

外企接受大龄程序员吗?

本人知乎账号同公众号:老胡聊Java,欢迎留言并咨询 亲身体会外企经历所见所闻,外企能接受大龄程序员。 1 大概是10年的时候,进一家知名外企,和我一起进的一位manager,后来听下来,年龄35&#xf…

html的标签

基础标签 标签描述<h1>-<h6>定义标题&#xff0c;h1最大&#xff0c;h6最小<font>定义文本的字体&#xff0c;字体尺寸&#xff0c;字体颜色<b>定义粗体文本<i>定义斜体文本<u>定义文本下划线<center>定义文本居中<p>定义段落…
最新文章