如何在Java8中使用日期时间库

  介绍

这期内容当中小编将会给大家带来有关如何在Java8中使用日期时间库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、为什么引入新的日期时间库

Java对日期,日历及时间的处理一直以来都饱受诟病,尤其是它决定将java.util。日期定义为可修改的以及将SimpleDateFormat实现成非线程安全的。

关于这个新的时间日期库的最大的优点就在于它定义清楚了时间日期相关的一些概念,比方说,瞬时时间(即时),持续时间(持续时间),日期(日期),时间(时间)时区(时区)以及时间段(时期),同时它也借鉴了Joda库的一些优点,比如将人和机器对时间日期的理解区分开的. java 8仍然延用了ISO的日历体系,并且与它的前辈们不同,java。时间包中的类是不可变且线程安全的。

二,如何使用Java8的新日期和时间

首先认识下Java8新日期和时间的一些关键类:

节类名说明即时代表时间戳LocalDate不包含具体时间的日期作用是不包含日期的时间LocalDateTime包含了日期及时间,没有时区信息ZonedDateTime包含时区的完整的日期时间,偏移量是以UTC/格林威治时间为基准的DateTimeFormatter日期解析和格式化工具类

接下来从几个示例中认识Java8新日期和时间的特别之处,很强大

<强>在Java8中获取当前日期

Java 8中有一个叫LocalDate的类,它能用来表示今天的日期。这个类与java.util。日期略有不同,因为它只包含日期,没有时间,因此,如果你只需要表示日期而不包含时间,就可以使用它。

LocalDate  today =, LocalDate.now ();   System.out.println (“Today  is ,:,“, +,今天);

输出结果:

今天是:2020-12-13

从输出结果中可以看的到,日期是格式化完了后再输出来的,不像之前的日期类那样,打印出来的数据都是未经格式化的,不便于阅读。

<强>在Java8中获取当前的年月日

LocalDate类中提供了一些很方便的方法可以用于提取出年月日以及其它的日期属性。使用这些方法,你可以获取到任何你所需要的日期属性,而不再需要使用java.util。日历这样的类

LocalDate  today =, LocalDate.now ();   int  year =, today.getYear ();   int  month =, today.getMonthValue ();   int  day =, today.getDayOfMonth ();   System.out.printf (“Year : % d ,, Month :, % d ,, day :, % d  \ t  % n",,年,月,日)。

输出结果:

: 2020年,月:12日:13

<强>在Java8中获取某个特定的日期

使用工厂方法LocalDate.of(),则可以创建出任意一个日期,它接受年月日的参数,然后返回一个等价的LocalDate实例。关于这个方法还有一个好消息就是它没有再犯之前API中的错,比方说,年只能从1900年开始,月必须从0开始,等等。这里的日期你写什么就是什么,比如说,下面这个例子中它代表的就是1月14日,没有什么隐藏逻辑

LocalDate  today =, LocalDate.of(2020年,12日,13);   System.out.println (“Today  is ,:,“, +,今天);

输出结果:

今天是:2020-12-13

<强>在Java8中检查两个日期是否相等

LocalDate重写了等于方法来进行日期的比较

LocalDate  Today =, LocalDate.now ();   LocalDate  date =, LocalDate.of(2014年,1日,14),,   如果(date.equals(今天)){,   System.out.printf才能(“Today  % s 以及date  % s 断开连接;same  date  % n",,现在,,日期),,   }

输出结果:

今天2020-12-13日期和2020-12-13是相同的日期

<强>在Java8中检查重复事件

使用MonthDay类。这两个类由月日组合,不包含年信息,也就是说你可以用它来代表每年重复出现的一些日子。当然也有一些别的组合,比如说YearMonth类。它和新的时间日期库中的其它类一样也都是不可变且线程安全的,并且它还是一个值类(价值类)

LocalDate  today =, LocalDate.now ();   LocalDate  dateOfBirth =, LocalDate.of(2020年,12日,13);   MonthDay  birthday =, MonthDay.of (dateOfBirth.getMonth (),, dateOfBirth.getDayOfMonth ());   MonthDay  currentMonthDay =, MonthDay.from(今天);   if  (currentMonthDay.equals(生日),{   System.out.println(“哦,,today  is  your  birthday");   },{else    System.out.println(“对不起,,today  is  not  your  birthday");   }

如何在Java8中使用日期时间库