Java日期类Date、SimpleDateFormat 日期格式类、Calendar详细介绍

news2024/9/19 10:44:48

目录

  • 一、Date类
    • 1.1 Date类简单介绍
    • 1.2 Date类的构造方法
        • 代码演示
  • 二、SimpleDateFormat 日期格式化类
    • 2.1 SimpleDateFormat 日期格式化类简单介绍
    • 2.2 构造方法
        • 代码演示
    • 日期格式化模板
    • 常用方法
        • 代码演示
        • 注意
  • 三、Calendar类
    • 3.1 简单介绍
    • 3.2 创建对象
        • 代码演示
    • 3.3 静态常量
    • 3.4 常用方法
        • 设置时间方法
        • 代码演示
        • 获得日期方法
        • 日期比较方法
        • 代码演示
        • 改变日期方法
  • 总结
    • 最后

一、Date类

1.1 Date类简单介绍

  • 位于Java.util包下,注意不要导错,在Java.sql包下也有一个Date类
    在这里插入图片描述
  • Date 类用于表示一个特定的时间点。它是 Java 中最基本的日期类,提供了多种方法来获取和设置日期和时间的各个部分。
  • 注意:Date类中大部分操作日期的方法都被Calendar类代替了,Date类现在主要用于获取日期对象,那么我们接下来主要来介绍一下Date类的构造方法,是如何来创建对象的。
  • 下图可以看到大部分方法都过时了。
    在这里插入图片描述

1.2 Date类的构造方法

在这里插入图片描述

  • 上图发现,仅有两个构造方法未过时,那么我们就针对这两个展开来讲一下。
方法签名方法描述
Date()分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)
Date(long date)分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
代码演示
     //获得当前时间对象
        Date date = new Date();
        System.out.println(date);//Sun Jun 09 22:10:52 CST 2024
        
        //获取从1970-1-1加指定的毫末值的对象,即从1970-1-1加上传入的毫秒值
        Date date1 = new Date(10*24*60*60*1000);
        // 一秒 = 1000ms,那么指定的毫秒值10*24*60*60*1000就是10天,
        // 获得日期就是1970-1-11
        System.out.println(date1);//Sun Jan 11 08:00:00 CST 1970
        
        //创建日期格式化对象
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(simpleDateFormat.format(date));// 2024-06-09
        System.out.println(simpleDateFormat.format(date1));// 1970-01-11

在演示代码中发现正常打印日期对象,输出为Sun Jan 11 08:00:00 CST 1970
这是国际日期,不太符合中国人的日期,所以就用到了SimpleDateFormat日期格式化类,来打印出适合中国人看的日期,那么接下就讲一下SimpleDateFormat日期格式化类如何使用

二、SimpleDateFormat 日期格式化类

2.1 SimpleDateFormat 日期格式化类简单介绍


  • SimpleDateFormat 类是用于格式化和解析日期的类
  • 可以将日期对象转换为指定格式的字符串。
  • 可以将字符串解析为日期对象。
  • 可以自定义日期格式。

2.2 构造方法


方法签名方法描述
SimpleDateFormat()用默认的模式和默认语言环境的日期格式符号构造对象
SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造对象
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)用给定的模式和日期符号构造对象
SimpleDateFormat(String pattern, Locale locale)用给定的模式和给定语言环境的默认日期格式符号构造对象
代码演示
  // 无参数构造方法
            SimpleDateFormat sdf1 = new SimpleDateFormat();
            Date date1 = new Date();
            String str1 = sdf1.format(date1);
            System.out.println("默认日期格式:" + str1);// 默认日期格式:24-6-9 下午10:41

            // 带字符串参数构造方法
            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date2 = new Date();
            String str2 = sdf2.format(date2);
            System.out.println("自定义日期格式:" + str2); // 自定义日期格式:2024-06-09 22:41:04

            // 带字符串和Locale参数构造方法
            //pattern - 描述日期和时间格式的模式
            //locale - 其日期格式符号要被使用的语言环境
            SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);//中国语言环境
            Date date3 = new Date();
            String str3 = sdf3.format(date3);
            System.out.println("自定义日期格式和Locale:" + str3);// 自定义日期格式和Locale:2024-06-09 22:41:04

            // 带DateFormatSymbols参数构造方法
            //pattern - 描述日期和时间格式的模式
            //formatSymbols - 要用来格式化的日期格式符号
            DateFormatSymbols dfs = new DateFormatSymbols(); //创建DateFormatSymbols对象,用于传入
            SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", dfs);
            Date date4 = new Date();
            String str4 = sdf4.format(date4);
            System.out.println("自定义日期格式和DateFormatSymbols:" + str4);// 自定义日期格式和DateFormatSymbols:2024-06-09 22:41:04

日期格式化模板


日期模板模板结果
“yyyy.MM.dd G ‘at’ HH:mm:ss z”2001.07.04 AD at 12:08:56 PDT
“EEE, MMM d, ''yy”Wed, Jul 4, '01
“h:mm a”12:08 PM
“hh ‘o’‘clock’ a, zzzz”12 o’clock PM, Pacific Daylight Time
“K:mm a, z”0:08 PM, PDT
“yyyyy.MMMMM.dd GGG hh:mm aaa”02001.July.04 AD 12:08 PM
“EEE, d MMM yyyy HH:mm:ss Z”Wed, 4 Jul 2001 12:08:56 -0700
“yyMMddHHmmssZ”010704120856-0700
“yyyy-MM-dd’T’HH:mm:ss.SSSZ”2001-07-04T12:08:56.235-0700
yyyy-MM-dd2001-07-04
yyyy年MM月dd日 HH:mm:ss 2001-07-04 12:08:56
yy/M/d 01/7/4

红色字体为常用模板

常用方法


方法签名方法描述
String format(Date date)格式化日期对象为字符串
Date parse(String source)解析字符串为日期对象
String toLocalizedPattern()获取当前日期格式的本地化模式
String toPattern()获取当前日期格式的模式

黄色标记为必会方法

代码演示
  // format(Date date) 方法
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = new Date();
        String str1 = sdf1.format(date1);
        System.out.println("格式化日期对象为字符串:" + str1);

        // parse(String source) 方法
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str2 = "2022-01-01 12:00:00";
        try {
            Date date2 = sdf2.parse(str2);
            System.out.println("解析字符串为日期对象:" + date2);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        // toLocalizedPattern() 方法
        SimpleDateFormat sdf4 = new SimpleDateFormat();
        String pattern4 = sdf4.toLocalizedPattern();
        System.out.println("获取当前日期格式的本地化模式:" + pattern4);

        // toPattern() 方法
        SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String pattern5 = sdf5.toPattern();
        System.out.println("获取当前日期格式的模式:" + pattern5);
注意
  • 解析字符串时,如果字符串不符合指定的日期格式,可能会抛出 ParseException 异常。
  • 在使用parse方法方法时需要处理异常,该异常为编译期异常
    在这里插入图片描述

三、Calendar类

3.1 简单介绍

  • Calendar 类是一个抽象类,它提供了一个通用的日期和时间操作接口 在这里插入图片描述
  • Calendar 类提供许多静态常量
  • 可以用来获取当前日期和时间
  • 可以用来设置日期和时间
  • 可以用来计算日期和时间

抽象类不能new对象,那Calendar如何实例化呢?

3.2 创建对象

  • Calendar 提供了getInstance 静态方法以便于让我们来创建对象。
方法签名方法描述
static Calendar getInstance()使用默认时区和语言环境获得一个日历。
static Calendar getInstance(Locale aLocale)使用默认时区和指定语言环境获得一个日历。
static Calendar getInstance(TimeZone zone)使用指定时区和默认语言环境获得一个日历。
static Calendar getInstance(TimeZone zone, Locale aLocale)使用指定时区和语言环境获得一个日历。
代码演示
 // 获取当前日期和时间的 Calendar 对象
        Calendar calendar = Calendar.getInstance();
        System.out.println("当前日期和时间:" + calendar.getTime());

3.3 静态常量

常量签名描述
Calendar.ERA ERA表示纪元,只能为0或1。0表示BC(“before Christ”,即公元前);1表示AD(拉丁语“Anno Domini”,即公元)。
Calendar.YEAR表示年份
Calendar.MONTH表示月份,需要加1,因为0表示1月,1表示2月,以此类推
Calendar.HOUR小时(12小时制)
Calendar.HOUR_OF_DAY一天中第几个小时(24小时制)
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.MILLISECOND毫秒
Calendar.DAY_OF_YEAR一年中第几天
DAY_OF_MONTH一月中第几天
DAY_OF_WEEK一周中第几天,注意,周日是1,周一是2,…
Calendar.DATE一月中第几天,同DAY_OF_MONTH的值是一样的
Calendar.DAY_OF_WEEK_IN_MONTH当月内一周中的某天的序号
Calendar.WEEK_OF_YEAR一年中的星期数,即本年中第几个星期
Calendar.WEEK_OF_MONTH当前月中的星期数,即本月中第几个星期
Calendar.DAY_OF_WEEK_IN_MONTH当前月中的第几个星期
Calendar.AM_PM AM_PM是在中午之前还是在中午之后,在中午12点之前返回0,在中午12点(包括12点)之后返回1
Calendar.JANUARY1月
Calendar.FEBRUARY2月
Calendar.MARCH3月
Calendar.APRIL4月
Calendar.MAY5月
Calendar.JUNE6月
Calendar.JULY7月
Calendar.AUGUST8月
Calendar.SEPTEMBER9月
Calendar.OCTOBER10月
Calendar.NOVEMBER11月
Calendar.DECEMBER12月

3.4 常用方法

设置时间方法
方法签名方法描述
void setFirstDayOfWeek(int value)设置一星期的第一天是哪一天;例如,在中国,这一天是周一,在美国,这一天是周日
void setLenient(boolean lenient)指定日期/时间解释是否是宽松的。
void setMinimalDaysInFirstWeek(int value)设置一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则使用值 1 调用此方法。
void setTime(Date date)使用给定的 Date 设置此 Calendar 的时间。
void setTimeInMillis(long millis)用给定的 long 值设置此 Calendar 的当前时间值。
void setTimeZone(TimeZone value)使用给定的时区值来设置时区。
void set(int field, int value)将给定的日历字段设置为给定值。
void set(int year, int month, int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
void set(int year, int month, int date, int hourOfDay, int minute)设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
void set(int year, int month, int date, int hourOfDay, int minute, int second)设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。

黄色为重要方法,下面只演示重要方法

代码演示
calendar.set(Calendar.YEAR, 2024);// 设置年份
calendar.set(Calendar.MONTH, 1);// 设置月份
calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置日份
System.out.println("设置后的日期和时间:" + calendar.getTime());// 设置后的日期和时间:Thu Feb 01 23:43:12 CST 2024

calendar1.set(2024,4,31);// 注意:实际月份为指定数字+1  
System.out.println(simpleDateFormat.format(calendar1.getTime()));//2024-05-31

发现Calendar也需要格式化日期,所以SimpleDateFormat 很重要!

获得日期方法
方法签名方法描述
int get(int field)返回给定日历字段的值。
Date getTime()返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象
	 	int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println("年份:" + year + ", 月份:" + month + ", 日份:" + day);
        System.out.println("当前日期和时间:" + calendar.getTime());
日期比较方法
方法签名方法描述
boolean equals(Object obj)将此 Calendar 与指定 Object 比较。
boolean after(Object when)判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。
boolean before(Object when)判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。
int compareTo(Calendar anotherCalendar)比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。
代码演示
		// after(Object when) 方法
        Calendar calendar1 = Calendar.getInstance();
        calendar1.set(2024, 1, 1);

        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(2024, 1, 2);

        boolean after = calendar1.after(calendar2);
        System.out.println("calendar1 是否在 calendar2 之后:" + after);//calendar1 是否在 calendar2 之后:false

        // before(Object when) 方法
        boolean before = calendar1.before(calendar2);
        System.out.println("calendar1 是否在 calendar2 之前:" + before);//calendar1 是否在 calendar2 之前:true

        // compareTo(Calendar anotherCalendar) 方法
        int compareTo = calendar1.compareTo(calendar2);
        System.out.println("calendar1 与 calendar2 的比较结果:" + compareTo);//calendar1 与 calendar2 的比较结果:-1

        // equals(Object obj) 方法
        Calendar calendar3 = Calendar.getInstance();
        calendar3.set(2024, 1, 1);

        boolean equals = calendar1.equals(calendar3);
        System.out.println("calendar1 是否与 calendar3 相等:" + equals);//calendar1 是否与 calendar3 相等:true
改变日期方法
方法签名方法描述
abstract void add(int field, int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量。
 // 增加日期和时间的指定字段
        calendar.add(Calendar.DAY_OF_MONTH, 1); // 增加一天
        System.out.println("增加一天后的日期和时间:" + calendar.getTime());

        calendar.add(Calendar.MONTH, 1); // 增加一个月
        System.out.println("增加一个月后的日期和时间:" + calendar.getTime());

        calendar.add(Calendar.YEAR, 1); // 增加一年
        System.out.println("增加一年的日期和时间:" + calendar.getTime());

        // 减少日期和时间的指定字段
        calendar.add(Calendar.DAY_OF_MONTH, -1); // 减少一天
        System.out.println("减少一天后的日期和时间:" + calendar.getTime());

        calendar.add(Calendar.MONTH, -1); // 减少一个月
        System.out.println("减少一个月后的日期和时间:" + calendar.getTime());

        calendar.add(Calendar.YEAR, -1); // 减少一年
        System.out.println("减少一年的日期和时间:" + calendar.getTime());

总结

日期类
Date
Calendar抽象类
SimpleDateFormat
作用:格式化日期,format方法,常用模板:yyyy-MM-dd
作用:用于获取日期对象,大部分方法被Calendar代替
通过getInstance方法获取对象,get,set,add,after,before,equals,compareTo等方法

最后

如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Idea-Linux远程开发部署

第一步:File->Remote Development 第二步: 第三步: 第四步:在Host位置填写Linux虚拟机的IP地址,在Username、Password填写对应的账号密码后点击Test Connection测试连接。 第五步: 第六步:在…

iCloud完全指南:释放Apple云服务的终极潜力

iCloud是苹果公司提供的云服务,它允许用户存储和同步照片、文档、音乐、应用数据以及更多类型的文件。通过有效利用iCloud,用户可以在不同设备间无缝地访问和编辑内容。本文旨在全面介绍如何高效使用iCloud,确保您能够最大化这一服务的价值。…

【玩转C语言】第四讲--->操作符与循环语句

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 引言: 大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识…

C语言 | Leetcode C语言题解之第142题环形链表II

题目: 题解: struct ListNode* detectCycle(struct ListNode* head) {struct ListNode *slow head, *fast head;while (fast ! NULL) {slow slow->next;if (fast->next NULL) {return NULL;}fast fast->next->next;if (fast slow) {s…

vue2的form利用插槽修改错误提示UI

1. 需求 很多时候我们使用el-form想修改下错误提示的UI,比如table中使用form校验这类场景下错误提示的UI调整就非常重要。 2. 了解文档 Form-Item Scoped Slot name说明error自定义表单校验信息的显示方式,参数为 { error } 3.实际使用 html里使用…

【List,ArrayList与顺序表】

目录 1,什么是List 2,List的使用 3,线性表 4,顺序表 4.1 接口的实现 5, ArrayList简介 6,ArrayList的使用 6.1 ArrayList的构造方法 6.2 ArrayList的常见操作 6.3 ArrayList的遍历 7,…

Layui实现下拉多选功能

1、问题概述? 提供源码下载 在项目中有很多地方需要使用到下拉框,并且实现选择多个信息,下面是展示。 支持如下功能: 1、分页 2、主题自定义 3、国际化 4、下拉方向 5、Tips修改等 6、Style自定义样式 7、取值 8、赋值 2、资源准备及测试? 2.1、资源下载

使用Puppeteer生成echarts图片

Puppeteer简介 Puppeteer 是一个用于控制 Headless Chrome 或 Chromium 浏览器的 Node.js 库。它提供了一个高层次的 API,能够让你以编程方式操作浏览器,从而实现自动化任务,比如生成页面截图和 PDF、抓取网页内容、自动化表单提交、UI 测试…

C++ 贪心算法——跳跃游戏、划分字母区间

一:跳跃游戏 55. 跳跃游戏 题目描述:给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true &#xff1…

【服务实现读写分离】

文章目录 什么是读写分离基于Spring实现实现读写分离项目中常用的数据源切换依赖包 什么是读写分离 服务读写分离(Service Read-Write Splitting)是一种常见的数据库架构设计模式,旨在提高系统的性能和可扩展性。通过将读操作和写操作分离到…

借助ChatGPT快速仿写一篇优质论文,无痛仿写、完美创作

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。可以添加我(yida985)交流学术写作或ChatGPT等AI领域相关问题,多多交流,相互成就,共同进步 在学术写…

探索智慧景区票务系统的架构与应用

随着旅游业的迅速发展,智慧景区票务系统已经成为提升景区管理效率、优化游客体验的重要工具。智慧景区票务系统的架构设计与应用,将现代信息技术与景区管理相结合,为景区的门票销售、入园管理和游客服务提供了全新的解决方案。本文将深入探讨…

形参和实参的区别

形参:函数定义时声明的参数。 实参:调用函数时传递的参数。

数字孪生智慧水利:精准管理与智能决策的新时代

图扑数字孪生技术在智慧水利中的应用,通过虚拟模型与真实水利系统的无缝连接,实现对水资源和水利工程的全面监控和精细管理。实时数据采集与动态模拟提升了水利系统的预测和响应能力,从洪水预警到水质监测,数字孪生助力各项决策更…

一款开源文件加速下载利器

前言 大文件的下载,浏览器支持不是很好,今天下载了一个20个G的文件,连续失败了好多次。 然后寻找到了一个开源的下载工具gospeed,可以完美的解决这个问题。而且下载速度快。 简介 Gopeed(全称 Go Speed)&am…

k8s面试题大全,保姆级的攻略哦(三)

目录 1、简述ETCD及其特点? 2、简述ETCD适应的场景? 3、简述什么是Kubernetes? 4、简述Kubernetes和Docker的关系? 5、简述Kubernetes中什么是Minikube、Kubectl、Kubelet? 6、简述Kubernetes常见的部署方式? 7、简述Kubernetes如何实现集群管理? 8、简述Kubern…

2 - 寻找用户推荐人(高频 SQL 50 题基础版)

2.寻找用户推荐人 考点: sql里面的不等于,不包含null -- null 用数字判断筛选不出来 select name from Customer where referee_id !2 OR referee_id IS NULL;

RK3288 android7.1 实现ota升级时清除用户数据

一,OTA简介(整包,差分包) OTA全称为Over-The-Air technology(空中下载技术),通过移动通信的接口实现对软件进行远程管理。 1. 用途: OTA两种类型最大的区别莫过于他们的”出发点“(我们对两种不同升级包的创建&…

这4个科研思维陷阱,可能正在阻碍你发表论文!

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 昨天,有位同学忧心忡忡的过来问我:一区文章已经接收了,因为两张图里有错误,想要撤稿重投。 我的建议如下: 1 重新投…