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();
//时间戳转LocalDateLocalDate localDate = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDate();
//时间戳转LocalDateTimeLocalDateTime localDateTime = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();