首页 > 编程语言 >Java日期类Date、SimpleDateFormat 日期格式类、Calendar详细介绍

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

时间:2024-06-12 19:58:28浏览次数:23  
标签:Java SimpleDateFormat println 日期 Date Calendar out

目录

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

最后

如果感觉有收获的话,点个赞

标签:Java,SimpleDateFormat,println,日期,Date,Calendar,out
From: https://blog.csdn.net/m0_73940426/article/details/139566796

相关文章

  • 【jmeter】ubuntu分布式jmeter报错:java.rmi.ConnectException: Connection refused to
    一、场景   由于高并发测试,服务器资源不够用,所以需要使用jmeter分布式进行测试,但是测试过程中报错:java.rmi.ConnectException:Connectionrefusedtohost:127.0.1.1;  二、问题原因   就是hostname-i如果返回的是127.0.1.1 三、处理方法   修改hostna......
  • Java面向对象的介绍 , 类和对象的概念 , 匿名对象的使用 ,对象的内存图 ,成员变量和局
    第一章.类和对象1.面向对象的介绍1.面向过程:自己的事情自己干,代表语言C语言洗衣服:每一步自己要亲力亲为->找个盆,放点水,找个搓衣板,搓搓搓2.面向对象:自己的事情别人帮忙去干,代表语言Java语言洗衣服:自己的事情别人干->全自动洗衣机......
  • 二级web基础操作题练习(6)——嵌入Javascript代码
    -----要求----- 用JavaScript编写如图1所示页面,当在第一个文本框中输入URLhttp://test.cn/index.jsp?key0=0&key1=1&key2=2,点击按钮“解析参数“后,在下面的三个文本框中分别显示解析出来的参数,如图2所示。图1图2 -----代码示例-----<html><head><!--设置字符编......
  • Java线程池以及Future和CompletableFuture的用法
    参考:https://blog.csdn.net/weixin_50330544/article/details/1316871501.线程池为什么使用线程池?频繁申请/销毁资源和调度资源,将带来额外的消耗,可能会非常巨大。对资源无限申请缺少抑制手段,易引发系统资源耗尽的风险。系统无法合理管理内部的资源分布,会降低系统的稳定性。......
  • Java集合总结
    JAVA中常见的集合总结使用集合的好处:可以动态的保存任意多个对象,使用比较方便提供了一些列方便的操作对象的方法:add,remove,set,get等使用集合添加,删除元素的示意代码简洁明了集合主要分为两种:单列集合:集合中存放的是单个对象双列集合:集合中存放的是键值对对象C......
  • 深入理解java设计模式之单例模式
    这里写目录标题概述单例模式是什么单例模式的使用场景单例模式的优缺点单例模式的几种实现方式饿汉式懒汉式双重检查锁定机制静态内部类枚举使用容器几种可能破坏单例类的方法多线程环境下的竞争条件使用反射机制使用序列化多个类加载器......
  • 学习分享-Tomcat 的线程池在工作方式上与普通的 Java 线程池的区别
    前言最近在学习过程中遇到在某个场景下:修改某条数据时,给该线程上分布式写锁,然后引入延迟队列处理其他请求;这个方案有一定的缺点,因为在用到消息队列时,不存在占用过多线程从而导致OOM的问题,消费者组只会安排固定的几个线程去拉取消息,如果碰到上面那种拿不到锁的情况,阻塞等待......
  • SSM-小区物业管理系统-48954(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、
    基于SSM小区物业管理系统摘要随着计算机科学技术日渐成熟,人们已经深刻认识到了计算机功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用。每个社区的物业管理是一项系统而复杂的工作,它需要一个团队互相配合、分工协作。在该领域,传统的手工存取......
  • java 与jdk 关系
      java与jdk的关系Java与JDK的关系是,Java是一种编程语言,而JDK(JavaDevelopmentKit)是Java语言的官方开发工具包。12JDK是整个Java技术的核心,它包括了JRE(JavaRuntimeEnvironment)和一系列Java开发工具(如javac、java、javadoc等)。JRE是Jav......
  • 【问题解决】java.util.jar.JarException: file:bcprov-jdk18on-1.78.jar is not sign
    现象启动程序报错,同时在classpath下有多个bcprov-jdk开头的包Causedby:java.util.jar.JarException:file:/C:/Users/93986/.gradle/caches/modules-2/files-2.1/org.bouncycastle/bcprov-jdk18on/1.78/619aafb92dc0b4c6cc4cf86c487ca48ee2d67a8e/bcprov-jdk18on-1.78.jaris......