java 8中除了Lambda表达式,Stream流等新特性,还有新的日期时间API,为什么会引入新的日期处理API呢?旧的日期处理类,线程不安全,而且对于时区处理起来非常的麻烦。因此java 8 在java.time包下增加了很多新的API,主要包括Local(本地,简化了日期时间的处理,没有时区的问题)和Zoned(时区,通过制定的时区处理日期时间)。
具体怎么用,简单举几个例子吧。
//本地API
LocalDateTime currentime = LocalDateTime.now();
System.out.println("当前时间:"+currentime);
LocalDate date1 = currentime.toLocalDate();
System.out.println("当前日期的年月日:"+ date1);
LocalTime time1 = currentime.toLocalTime();
System.out.println("当前日期的时分秒:"+time1);
LocalDateTime updateDate = currentime.withDayOfMonth(10).withMonth(9).withYear(2018);
System.out.println("修改后的日期:"+updateDate);
LocalDate date2 = LocalDate.of(2017,Month.DECEMBER,12);
System.out.println("自定义一个日期:"+date2);
LocalTime time2 = LocalTime.of(12,34,56);
System.out.println("自定义时分秒:"+time2);
LocalTime time3 = LocalTime.parse("10:23:45");
System.out.println("字符串转换为时间:"+time3);
//时区API
ZonedDateTime zoneDate = ZonedDateTime.now();
System.out.println("带有时区的日期:"+zoneDate);
ZoneId id = ZoneId.systemDefault();
System.out.println("获取默认时区:"+id);
ZoneId updateId = ZoneId.of("Europe/Paris");
System.out.println("自定义时区:"+updateId);
结果:
当前时间:2020-08-17T22:31:21.686
当前日期的年月日:2020-08-17
当前日期的时分秒:22:31:21.686
修改后的日期:2018-09-10T22:31:21.686
自定义一个日期:2017-12-12
自定义时分秒:12:34:56
字符串转换为时间:10:23:45
带有时区的日期:2020-08-17T22:31:21.706+08:00[Asia/Shanghai]
获取默认时区:Asia/Shanghai
自定义时区:Europe/Paris
有关日期的方法还有很多,就不一一举例了,大家可以自己看源码学习。