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

目录

  • 一、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等方法

最后

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

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

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

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

相关文章

战略引领下的成功产品开发之路

在当今竞争激烈的市场环境中,成功的产品开发不仅仅依赖于创意和技术的卓越,更需要战略性的规划和执行。本文将探讨战略在成功产品开发中的重要性,并结合实际案例,分析如何在战略的指引下,将创意转化为商业化的产品或服…

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题 我们的简约风格,以纯洁的白色和深邃的紫色为主色调,为您提供了一种清新、时尚的浏览体验。在这个简洁而美丽的界面中,您可以轻松畅享各种精彩短视频。我们专注于简单的…

darts 时序预测入门

darts是一个强大而易用的Python时间序列建模工具包。在github上目前拥有超过7k颗stars。 它主要支持以下任务: 时间序列预测 (包含 ARIMA, LightGBM模型, TCN, N-BEATS, TFT, DLinear, TiDE等等) 时序异常检测 (包括 分位数检测 等等) 时间序列滤波 (包括 卡尔曼滤波&#xff0…

【CS.OS】操作系统如何使用分页和分段技术管理内存

1000.5.CS.OS.1.3-基础-内存管理-操作系统如何使用分页和分段技术管理内存-Created: 2024-06-09.Sunday10:24 操作系统的内存管理是一个复杂而关键的功能,它确保了程序可以高效、安全地运行。虚拟内存管理是其中一个重要的概念,它通过分页和分段技术来实…

2024-6-9

今日安排: 学校的课程作业windows SEH 机制简单入门windows 用户态 pwn / 内核态入门 计网实验报告 && 网安实验报告继续审计 nf_tables 源码,主要看 active 相关逻辑。复现 CVE-2022-32250 这个漏洞【 && iptables 相关学习】♥♥♥♥…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及电力不平衡风险的配电网分区协同规划》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

缓存更新策略中级总结

背景 看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作…

说说Lambda架构

Lambda架构由Storm的作者Nathan Marz提出,其设计目的在于提供一个能满足大数据库系统关键特性的架构,包括高容错、低延迟、可扩展等。其整合离线批处理和实时流处理,融合不可变形、读写分离和复杂隔离性等原则,集成Hadoop、Kafka、…

【C#线程设计】2:backgroundWorker

实现: (1).控件:group Box,text Box,check Box,label,botton,richtextbox 控件拉取见:https://blog.csdn.net/m0_74749240/article/details/139409510?spm1…

html+CSS+js部分基础运用19

1. 应用动态props传递数据,输出影片的图片、名称和描述等信息【要求使用props】,效果图如下: 2.在页面中定义一个按钮和一行文本,通过单击按钮实现放大文本的功能。【要求使用$emit()】 代码可以截图或者复制黏贴放置在“实验…

红黑树/红黑树迭代器封装(C++)

本篇将会较为全面的讲解有关红黑树的特点,插入操作,然后使用代码模拟实现红黑树,同时还会封装出红黑树的迭代器。 在 STL 库中的 set 和 map 都是使用红黑树封装的,在前文中我们讲解了 AVL树,对于红黑树和 AVL 树来说&…

手机自动化测试:4.通过appium inspector 获取相关app的信息,以某团为例,点击,搜索,获取数据等。

0.使用inspector时,一定要把不相关的如weditor啥的退出去,否则,净是事。 1.从0开始的数据获取 第一个位置,有时0.0.0.0,不可以的话,你就用这个。 第二个位置,抄上。 直接点击第三个启动。不要…

论文阅读:Indoor Scene Layout Estimation from a Single Image

项目地址:https://github.com/leVirve/lsun-room/tree/master 发表时间:2018 icpr 场景理解,在现实交互的众多方面中,因其在增强现实(AR)等应用中的相关性而得到广泛关注。场景理解可以分为几个子任务&…

Makefile:从零开始入门Makefile

目录 1.前言 2.Makefile的简单介绍 3.Makefile中的指令规则 4.Makefile的执行流程 5.Makefile中的变量类型 6.Makefile中的模式匹配 7.Makefile中的函数 8.Makefile补充知识 前言 在Linux中编译CPP文件,我们能够使用GCC命令进行编译,但当项目文件多且繁杂…

如何利用pandas解析html的表格数据

如何利用pandas解析html的表格数据 我们在编写爬虫的过程中,经常使用的就是parsel、bs4、pyquery等解析库。在博主的工作中经常的需要解析表格形式的html页面,常规的写法是,解析table表格th作为表头,解析td标签作为表格的行数据 …

网站不收录的原因

随着互联网的发展,越来越多的网站被创建和更新,然而,并不是所有的网站都能被搜索引擎收录。有时候,这些网站会因为各种原因而被搜索引擎排除在搜索结果之外。下面我们来探讨一下网站不收录的原因。 首先,网站不收录可能…

贪心算法学习三

例题一 解法(贪⼼): 贪⼼策略: ⽤尽可能多的字符去构造回⽂串: a. 如果字符出现偶数个,那么全部都可以⽤来构造回⽂串; b. 如果字符出现奇数个,减去⼀个之后,剩下的…

12.【Orangepi Zero2】基于orangepi_Zero_2 Linux的智能家居项目

基于orangPi Zero 2的智能家居项目 需求及项目准备 语音接入控制各类家电,如客厅灯、卧室灯、风扇回顾二阶段的Socket编程,实现Sockect发送指令远程控制各类家电烟雾警报监测, 实时检查是否存在煤气泄漏或者火灾警情,当存在警情时…

Robust Tiny Object Detection in Aerial Images amidst Label Noise

文章目录 AbstractIntroductionRelated WorkMethodsClass-aware Label CorrectionUpdateFilteringTrend-guided Learning StrategyTrend-guided Label ReweightingRecurrent Box RegenerationExperimentpaper Abstract 精确检测遥感图像中的小目标非常困难,因为这类目标视觉信…

关于目前ggrcs包的报错解决方案

目前有不少粉丝私信我说使用ggrcs包出现如下错误 我查看了一下,目前报错来源于新版本后的RMS包,主要是预测函数的报错,这个只能等R包作者来修复这个错误。目前需要急用的话,我提供了一个方案,请看下面视频操作 关于目前…