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

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

最后

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

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

  • 43
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值