Java各个时间类总结归纳,最全一篇( 二 )

输出
Instant = 2020-06-10 16:02:26这样就比较容易的解决了格式化的问题,当然你也可以自定义一个@config来完成对Instant的格式化,也不失为一种一劳永逸的方案 。LocalDateTime和DateTimeFormatter在后面的内容中会做详细的介绍 。
在讲解LocalDateTime之前我们先分别介绍一下LocalDate和LocalTime,以便于能更深入地理解LocalDateTime 。
LocalDate和LocalTimeLocalDateLocalDate首先是一个不可变类,默认格式为yyyy-MM-dd,其次它是一个只获取年月日的类,侧重点在日历而不是时间(这里我们需要把日历和时间这两个概念区分开) 。
使用LocalDate.now()可以获取当前年月日,也可以使用LocalDate.of(year,month,dayOfMonth)来指定日期
public static void main(String[] args) {  LocalDate today = LocalDate.now();  System.out.println("LocalDate.now() = "+today);  today = LocalDate.of(2020,06,10);  LocalDate laterDate = today.plusDays(30);  System.out.println("LocalDate.of() = "+today.toString());  System.out.println("plusDays = "+laterDate.toString());  System.out.println("new Date() = "+ new Date());}输出
【Java各个时间类总结归纳,最全一篇】LocalDate.now() = 2020-06-09LocalDate.of() = 2020-06-10plusDays = 2020-07-10new Date() = Tue Jun 09 20:31:22 CST 2020从这个例子可以对比看出LocalDate和Date的不同 。
同时作为一个访问器方法,LocalDate每次都是生成一个新的对象,而不是改变原有的对象的值 。
可以从today.plusDays(30)中轻易地看到 。与之类似的就是更改器方法,在java较早的版本中有一个类java.util.GregorianCalendar
public static void main(String[] args) {  GregorianCalendar someDay = new GregorianCalendar(2020,06,9);  System.out.println("before someDay = "+someDay.getTime());  someDay.add(Calendar.DAY_OF_MONTH,30);  System.out.println("after someDay = "+someDay.getTime());}输出
before someDay = Thu Jul 09 00:00:00 CST 2020after someDay = Sat Aug 08 00:00:00 CST 2020可以看到someDay的值随着函数add的调用一直在变化着,这与LocalDate大不一样,这是需要注意的一个点 。
这边还需要注意一个点是localDate.getDayOfWeek().getValue(),LocalDate对于一周的枚举计数和Calendar有些不一样 。
LocalDate一周是从周一开始计数对应的value值为1,周日结束对应的value值为7 。
而Calendar一周是从周日开始计数对应的value值为1,周六结束对应的value为7,相比较下个人觉得LocalDate更加合理和好用一些 。
LocalDate常用的方法如下:
图片来自java核心技术卷2

Java各个时间类总结归纳,最全一篇

文章插图
 

Java各个时间类总结归纳,最全一篇

文章插图
 
LocalTimeLocalTime与LocalDate类似同样是一个不可变类,默认格式是HH:mm:ss.zzz,可以看到它所关注的是当前的时刻 。
public static void main(String[] args) {  LocalTime localTime = LocalTime.now();  System.out.println("LocalTime.now() = "+localTime);  localTime = LocalTime.of(8,8,8,888);  System.out.println("LocalTime.of() = "+localTime);  LocalTime laterTime = localTime.plusHours(2);  System.out.println("localTime.plusHours() = "+laterTime);  //根据时区获取当前时刻,同理适用与LocalDate  LocalTime newlocalTime = LocalTime.now(ZoneId.of("America/New_York"));  System.out.println("America/New_York Time = "+newlocalTime);}输出
LocalTime.now() = 20:58:54.941LocalTime.of() = 08:08:08.000000888localTime.plusHours() = 10:08:08.000000888America/New_York Time = 08:58:54.944这里我们会发现,尽管LocalTime默认的格式为HH:mm:ss.zzz,但是纳秒级别的精度它也是能支持的08:08:08.000000888 。LocalTime常用的方法如下:
Java各个时间类总结归纳,最全一篇

文章插图
 
java核心技术卷2
LocalDateTime经过对LocalDate和LocalTime的介绍,LocalDateTime相信大家也已经知道如何使用了 。


推荐阅读