Java——日期类的学习

本文详细介绍了Java中用于日期和时间处理的类,包括Date、Calendar、SimpleDateFormat以及Java8引入的LocalDate、LocalTime和ZoneDateTime。这些类分别用于表示特定时间、进行日期计算、格式化和解析日期,以及处理不同时区的日期和时间。文章还展示了如何使用这些类进行日期的比较、加减、格式化和解析等操作。
摘要由CSDN通过智能技术生成

目录

关于日期和时间的处理类:

Date:

Calendar:

SimpleDateFormat:

LocalDate:

LocalTime:

ZoneDateTime:

关于这些类的使用

Date

无参构造方法:Date();

boolean after(Date when);

boolean before(Date when);

int compareTo(Date date);

boolean equals(Object date);

long getTime();

String toString();

Calendar

静态常量

public Static Calendar getInstance();

public int get(int filed);

public final void set(int year,int month,int day);

public abstract void add(int field,int amount);

Date getTime();

 SimpleDateFormat

无参构造方法

有参构造方法

格式化(从Date到String)

解析(从String到Date)

LocalDate、LocalTime、LocalDateTime

获取当前的时间

自定义日期

日期的加减

日期的指定

获取日期的年月日周时分秒

日期的比较与Date类相似

计算时间间隔

日期格式化:将时间对象转换为日期字符串

解析:将时间字符串转化为日期对象

格式化同类型的对象:将日期对象格式化为日期对象

LocalDate转为Date

Date转为LocalDate


关于日期和时间的处理类:

使用以下类需要导包,java.util

Date:

表示特定的瞬间,精确到毫秒,可以用来存储和表示日期和时间。

Date对象可以调用它的构造函数或parse()方法(将字符串解析为日期)来创建。

Calendar:

可以用于表示时区、日期和时间,可以用来获取和设置日期的时间值,执行日期和时间的计算。Calendar可以精确地表示到毫秒以下的时间间隔。

Calendar是一个抽象类接口,所以不能直接实例化对象,其中里面提供了getInstance()这个方法,来初始化获取一个日历对象,返回Calendar对象。

SimpleDateFormat:

是DateFormat的子类,是日期格式化类,专门用来格式化和解析日期的。

格式化是将存储日期的类转化为字符串记录的日期形式,主要值Date类转化为String类。

解析式将表示日期的字符串转化为记载日期的类。


使用下列类需要导包,java.time

LocalDate:

是Java8中的一个新类,用于表示不带时间的日期,例如2023-05-09。与上两者不同的是LocalDate不包含任何时间信息,仅包含日期信息。

提供了一些比较旧的日期类更加简单的方法 ,例如plusDays()和minusDays()来增加或减小天数。也可以执行日期算术运算,例如计算日期之间的天数和周数。

LocalTime:

用于表示不带日期和时区的时间,提供一些简单的方法,用于增加或减少特定的小时数、分钟数或秒数,并支持时间算术运算。

ZoneDateTime:

表示带时区的日期和时间,就是在日期和时间中包含了时区信息,不仅可以表示:年-月-日和时-分-秒,还可以表示时区的信息,也可以用于执行日期和时间的算术运算。

这三个类之间的主要区别在于它们代表的具体内容和范围:LocalDate代表日期,LocalTime代表时间,ZoneDateTime表示带有时区的日期和时间。

关于这些类的使用

Date

Date对象表示的时间的默认顺序是:星期、月、日、小时、分、秒、年。

无参构造方法:Date();

  • 表示分配一个Date对象,并初始化,以便代表他被分配的时间,精确到毫秒,使用该构造方法创建的对象可以获取本地的当前时间。
        Date D=new Date();
        System.out.println(D);//Mon May 08 11:26:48 CST 2023

有参构造方法:Date(long date);

  • 表示分配一个Date对象,并将其初始化为表示从标准时间起指定的毫秒数(就是从格林尼治时间1970年1月1日0时0分0秒开始经过参数date指定的毫秒数)
        long D=24*6*60*1000;
        Date date=new Date(D);
        System.out.println(date);//Thu Jan 01 10:24:00 CST 1970

boolean after(Date when);

判断调用此方法的Date对象是否在指定日期之后。

boolean before(Date when);

判断调用此方法的Date对象是否在指定日期之前。

        //初始化一个Date对象,获取当前时间
        Date D1=new Date();
        System.out.println(D1);
        //分配一个Date对象
        long date=24*60*60*10000;
        Date D2=new Date(date);
        System.out.println(D2);
        //输出
        //判断D2的时间是否在D1之前
        System.out.println(D1.after(D2));//true
        System.out.println(D2.before(D1));//true

int compareTo(Date date);

比较当前调用此方法的Date对象和指定日期,两者相等时返回0,调用对象在指定日期之前返回负数,反之是正数。

boolean equals(Object date);

调用此方法的Date对象和指定的日期相等时返回true,不等时放回false。

        Date D1=new Date(24*60*60);
        System.out.println(D1);

        Date D2=new Date(24*60*60);
        System.out.println(D2);

        Date D3=new Date(24*60*60*2);
        System.out.println(D3);

        //调用方法
        System.out.println(D1.compareTo(D2));//0
        System.out.println(D1.compareTo(D3));//-1
        System.out.println(D1.equals(D2));//true
        System.out.println(D2.equals(D3));//false

long getTime();

返回字1970年1月1日0时0分0秒GMT以来此Date对象表示的毫秒数,

        Date D1=new Date(D);
        System.out.println(D1);//Fri Jan 02 08:00:00 CST 1970
        System.out.println(D1.getTime());//86400000
        

String toString();

获取当前日期和时间并用以下形式的输出:dow mon dd hh:mm:ss zzz yyyy;(dow是周几:Sun、Mon、Tue、Wed、Tue、Dri、Sat)。也可以不调用,输出的结果一样。

Calendar

静态常量

        Calendar.YEAR;//年份
        Calendar.MONDAY;//月份
        Calendar.DATE;//多少号
        Calendar.HOUR;//小时(12小时制)
        Calendar.HOUR_OF_DAY;//小时(24小时制)
        Calendar.MINUTE;//分钟
        Calendar.SECOND;//秒数
        Calendar.MILLISECOND;//毫秒数


        Calendar.WEEK_OF_MONTH;//当前月的第几个星期(日历式的第几周)
        Calendar.WEEK_OF_YEAR;//当前年的第几个星期
        Calendar.DAY_OF_WEEK_IN_MONTH;//当前月的第几个星期,以月份天数为标准,一个月的1号为第一周,8号为第二周
        Calendar.DAY_OF_MONTH;//对于一周七天,对应的是一周中的第几天
        Calendar.DAY_OF_YEAR;//表示一年中的第几天
        Calendar.DAY_OF_MONTH;//表示一月中的第几天


        Calendar.AM_PM;//上午或下午


        Calendar.SUNDAY;//周日
        Calendar.MONDAY;//周一
        Calendar.TUESDAY;//周二
        Calendar.WEDNESDAY;//周三
        Calendar.THURSDAY;//周四
        Calendar.FRIDAY;//周五
        Calendar.SATURDAY;//周六

public Static Calendar getInstance();

创建Calendar类型的子类对象。

        Calendar calendar=Calendar.getInstance();
        System.out.println(calendar);
        //java.util.GregorianCalendar[time=1683528233725,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=4,WEEK_OF_YEAR=19,WEEK_OF_MONTH=2,DAY_OF_MONTH=8,DAY_OF_YEAR=128,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=43,SECOND=53,MILLISECOND=725,ZONE_OFFSET=28800000,DST_OFFSET=0]

public int get(int filed);

根据日历字段,获取其对应的值。

        Calendar calendar=Calendar.getInstance();
        int year=calendar.get(Calendar.YEAR);
        System.out.println(year);//2023

public final void set(int year,int month,int day);

设置时间为指定的年,月,日。

        Calendar calendar=Calendar.getInstance();
        calendar.set(2022,2,14);
        int year=calendar.get(Calendar.YEAR);
        int month=calendar.get(Calendar.MONTH);
        int day=calendar.get(Calendar.DATE);
        System.out.println("year:"+year+"\tmonth:"+month+"\tday:"+day);//year:2022	mouth:52	day:14

public abstract void add(int field,int amount);

根据日历的规则,将指定时间添加或减少。

        Calendar calendar=Calendar.getInstance();
        calendar.add(Calendar.YEAR,3);
        calendar.add(Calendar.DATE,-10);
        int year=calendar.get(Calendar.YEAR);
        int month=calendar.get(Calendar.MONTH)+1;
        int date=calendar.get(Calendar.DATE);
        System.out.println("year:"+year+"\tmouth:"+month+"\tdate:"+date);//三年后的十天前

Date getTime();

返回一个Date表示日历的时间。

        Calendar calendar=Calendar.getInstance();
        Date D=calendar.getTime();
        System.out.println(D);//Mon May 08 15:10:55 CST 2023

 SimpleDateFormat

日期和时间格式有日期和时间模式字符串指定,在日期和时间模式字符串中,从‘A’到‘Z’以及从‘a’到‘z’引导的字母被解释为表示日期或时间字符串的组件的模式字母,对应如下:

y                年

M               月

d                日

H                时

m               分

s                秒

无参构造方法

public SimpleDateFormate();

使用默认模式和日期格式。

有参构造方法

public SimpleDateFormate(String pattern);

使用给定模式和默认的日期格式。

  • 格式化(从Date到String)

public final String format(Date date);

将日期格式化为日期时间字符串。

        Date d=new Date();
        SimpleDateFormat simpleFormatter=new SimpleDateFormat();
        String str=simpleFormatter.format(d);
        System.out.println(str);//23-5-8 下午3:24
        Date d=new Date();
        SimpleDateFormat simpleFormatter=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String str=simpleFormatter.format(d);
        System.out.println(str);//2023年05月08日 15:25:34
  • 解析(从String到Date)

public Date parse(String source);

从给定字符串开始解析文本及生成日期。

要使用带参的构造方法,且带参的构造方法中的格式要与指定字符串的格式相同,否则会抛出异常。

        String str="2023年5月8日 15:28:33";
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date date;
        date=simpleDateFormat.parse(str);//此处要将异常添加到方法名
        System.out.println(date);//Mon May 08 15:28:33 CST 2023

LocalDate、LocalTime、LocalDateTime

获取当前的时间

        LocalDate d1=LocalDate.now();
        LocalTime d2=LocalTime.now();
        LocalDateTime d3=LocalDateTime.now();

        System.out.println(d1);//2023-05-08
        System.out.println(d2);//15:45:00.151
        System.out.println(d3);//2023-05-08T15:45:00.151

自定义日期

        LocalDate d1=LocalDate.of(2023,5,8);
        LocalTime d2=LocalTime.of(15,46,33);
        LocalDateTime d3=LocalDateTime.of(2023,5,8,15,47,33);

        System.out.println(d1);//2023-05-08
        System.out.println(d2);//15:46:33
        System.out.println(d3);//2023-05-08T15:47:33

日期的加减

        LocalDate d1=LocalDate.now();
        LocalDate d2=d1.plusDays(1L);//添加一天 2023-05-09
        //月份    d1.plusMonths(x);   2023-06-08
        //年份    d1.plusYears(x);    2024-05-08
        //周数    d1.plusWeeks(x);    2023-05-15

        LocalDate d3=d1.minusDays(1L);//减去一天 2023-05-07
        //月份    d1.minusMonths(1L);   2023-04-08
        //月份    d1.minusYears(1L);   2022-05-08
        //月份    d1.minusWeeks(1L);   2023-05-01

小时、分钟、秒、毫秒同理。

日期的指定

        LocalDate d1=LocalDate.now();
        LocalDate d2=d1.withYear(2026);//指定年份为2026 2026-05-08
        //月份    d1.withDate(3);  2023-05-03
        //天数    d1.withMonth(3);  2023-03-08

        LocalDate d3=d1.withDayOfMonth(20);//指定为当月的第二十天 2023-05-20

获取日期的年月日周时分秒

        LocalDateTime d = LocalDateTime.now();
        int year = d.getYear();//223
        Month month = d.getMonth();//5
        int monthValue = d.getMonthValue();//MAY
        int dayOfMonth1 = d.getDayOfMonth();//8
        int hour = d.getHour();//16
        int minute = d.getMinute();//6
        int second = d.getSecond();//32
        int nano = d.getNano();//785000000(纳秒)

日期的比较与Date类相似

  • date1.isBefore(date2)
  • date1.isAfter(date2)
  • date1.isEqual(date2)
  • date1.isLeapYear(date2)//判断是否为闰年

计算时间间隔

Duration:用于计算两个LocalDateTime对象的时间间隔。

       LocalDateTime d1 = LocalDateTime.of(2022,2,1,10,10,10);
        LocalDateTime d2 = LocalDateTime.of(2023,2,5,20,20,20);
        Duration duration=Duration.between(d1,d2);
        System.out.println(duration.toDays());
        System.out.println(duration.toHours());
        System.out.println(duration.toMinutes());
        System.out.println(duration.toMillis());

日期格式化:将时间对象转换为日期字符串

        LocalDateTime d1 = LocalDateTime.now();
        DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH-mm-ss");
        System.out.println(dateTimeFormatter.format(d1));//2023-05-08 16-22-50

解析:将时间字符串转化为日期对象

        String str = "2023-05-08";//对应的是MM-dd,所以5和8前面要加‘0’
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate d1 = LocalDate.parse(str, dateTimeFormatter);
        System.out.println(d1);

格式化同类型的对象:将日期对象格式化为日期对象

        //将d1转换为dateTimeFormatter规定类型的,字符串类型str
        LocalDateTime d1=LocalDateTime.now();
        DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH-mm-ss");
        String str=dateTimeFormatter.format(d1);
        
        //将d2解析字符串str
        LocalDateTime d2=LocalDateTime.parse(str,dateTimeFormatter);
        
        System.out.println(d1);//2023-05-08T16:36:44.101
        System.out.println(d2);//2023-05-08T16:36:44

LocalDate转为Date

        //LocalDate转为Date
        LocalDate d1=LocalDate.now();
        Date d2=Date.from(d1.atStartOfDay(ZoneOffset.systemDefault()).toInstant());
        System.out.println(d2);//Mon May 08 00:00:00 CST 2023

        LocalDateTime d3=LocalDateTime.now();
        Date d4=Date.from((d3.atZone(ZoneOffset.ofHours(8))).toInstant());
        System.out.println(d4);//Mon May 08 16:44:34 CST 2023

Date转为LocalDate

        Date d1=new Date();
        LocalDate d2=d1.toInstant().atZone(ZoneOffset.systemDefault()).toLocalDate();
        System.out.println(d2);//2023-05-08

        LocalDateTime d3=d1.toInstant().atZone(ZoneOffset.systemDefault()).toLocalDateTime();
        System.out.println(d3);//2023-05-08T16:48:00.458
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明里灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值