LocalDate、LocalDateTime和其他时间格式的转换(JDK8)

JDK8以前,Java处理时间的方式非常繁琐,并且有很多坑,这里不做过多介绍。于是后面诞生了Joda Time这种优秀的日期-时间类库,相信还有不少的在校生还在使用,因为在2019年的校招秋招,我帮我大佬改校招试题,看到有人在简历中提到了Joda Time。在JDK8开始,其时间实现类就做了很多重大的改进,融入了JodaTime的优秀特性,诞生了LocalDate和LocalDateTime等时间处理类。也顺带提醒下还在校的做java开发的朋友,有用老版本的jdk还是快点升级吧,至少升个JDK8。

下面主要介绍LocalDate和LocalDateTime转化成其他时间格式

基础部分就不多说,请自行参阅:(英)https://docs.oracle.com/javase/8/docs/api/,(中)http://www.matools.com/api/java8

或者您有更好的实现思路欢迎指正。

 

LocalDateTime:

Long和LocalDateTime互转

//获取当前时间,localNowDate用作后面的举例
LocalDateTime localNowDate = LocalDateTime.now();


/**
 * 获取当前时间24小时前整点时间(可根据业务自行调整日期格式),统一LocalDateTime格式,后续方便根据业务自行转化类型
 * 
 * oneDayAgoDate使用Long类型,避免自动封箱拆箱带来的性能损耗
 */
Long oneDayAgoDate = Long.parseLong(DateTimeFormatter.ofPattern("yyyyMMddHH").format(localNowDate.plusHours(-24)));
LocalDateTime localOneDayAgoDate = LocalDateTime.parse(String.valueOf(oneDayAgoDate), DateTimeFormatter.ofPattern("yyyyMMddHH"));

LocalDateTime转时间戳 

//将LocalDateTime转换为日期格式yyyyMMDDHH的long型:
long nowDate = Long.parseLong(DateTimeFormatter.ofPattern("yyyyMMddHH").format(localNowDate));

//将LocalDateTime转化时间戳,精确到毫秒
String targetTimeStamp = localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());

 

LocalDate:

Long和LocalDate的相互转换

//获取当前时间,localNowDate用作后面举例
LocalDate localNowDate = LocalDate.now();


//这两句的作用,LocalDate有现成方法可直接替代
//注意时间格式最多只能精确到日,如果LocalDate用yyyyMMddHH转换会报错
Long sevenDayAgoDate = Long.parseLong(DateTimeFormatter.ofPattern("yyyyMMdd").format(localNowDate.plusDays(-6)));
LocalDate localSevenDayAgoDate = LocalDate.parse(String.valueOf(sevenDayAgoDate), DateTimeFormatter.ofPattern("yyyyMMdd"));

LocalDate转时间戳

//LocalDate转化为时间戳,精确到毫秒
String targetTimeStamp = String.valueOf(localSevenDayAgoDate.plusDays(i).atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli());

时间戳

时间戳转LocalDate、LocalDateTime

//获取当前时间戳,精确到毫秒
long timestamp = System.currentTimeMillis();
//时间戳转LocalDate
LocalDate localDate = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDate();
//时间戳转LocalDateTime
LocalDateTime localDateTime = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章