java8中LocalDate、LocalTime、LocalDateTime介绍

很久以前java8中就推出了新的Time API,旨在解决旧版Date和Calendar的缺陷。讲道理真的挺好用的,不过由其他工具对新版time的兼容并不够完善,导致现在使用还不够普及。大家都还在用老的Date类,苦?的封装时间工具函数,感?真的没意思。

(一)旧版Time/Date类的缺陷

(1)线程不安全:

首先旧版本的时间类是线程不安全的,在多线程操作同一个时间类实例时,会抛出异常。而新版本的时间工具全部都是线程安全的。

(2)设计混乱、可读性不好:

旧版本的java.util.Date,虽然名字叫Date,?是其实既包含日期也包含时间。同时在mysql中也有个java.sql.Date,这两个Date名字一摸一样,但是mysql的Date是不包含时间的。另外对日期格式化的工具却在java.text包中。包比较混乱,对我们程序盐多有不便。

(3)没有良好的时区方法支持:

新版本的时间类提供了非常良好的时区API,旧版本需要使用java.util.Calendar and java.util.TimeZone 等类。

(二)新版日期时间API的使用

1.LocalDate的使用:

(1)轻松的实现日期和周间的转换

// 获取2016年6月12号是周几
LocalDate.parse("2016-06-12").getDayOfWeek();

(2)轻松的判断是不是闰年

boolean leapYear = LocalDate.now().isLeapYear();

(3)轻松的获取每天的起始时间和结束时间

LocalDateTime beginningOfDay = LocalDate.parse("2016-06-12").atStartOfDay();

2.LocalTime的使用:

(1)轻松的获取时间最大值

// 23:59:59.99
LocalTime maxTime = LocalTime.MAX

(2)轻松的进行时间增减

(1)轻松的获取巴黎的时区

ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zoneId);

3.LocalDateTime的使用:

LocalDateTime包含日期和时间,是之前两者的合集,这里就不详细介绍了。

(三)新版时区API的使用

(1)轻松的获取巴黎的时区

ZoneId zoneId = ZoneId.of("Europe/Paris");

(2)将本地时区时间转为其他时区时间:

ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zoneId);

(四)获取日期时间间隔

// 日期间隔天数
int five = Period.between(finalDate, initialDate).getDays();
// 时间间隔秒数
int thirty = Duration.between(finalTime, initialTime).getSeconds();
发布了477 篇原创文章 · 获赞 588 · 访问量 267万+

猜你喜欢

转载自blog.csdn.net/qq_15037231/article/details/98098566