-->

Java8 LocalDateTime 与 ZonedDateTime 简单示例

2020-12-06 00:10发布

ZoneId代表“时区”,而ZoneOffset表示“时区偏移量”

可以通过以下的代码打印出所有支持的时区

ZoneId.getAvailableZoneIds().forEach(s-> System.out.println(s));
或
ZoneOffset.getAvailableZoneIds().forEach(s -> System.out.println(s));

列举几个时区的输出结果

GMT
UTC
UCT
Asia/Shanghai
Asia/Chongqing
Asia/Hong_Kong
Hongkong
Japan
...

示例代码

System.out.println( "本机默认时区:" + ZoneId.systemDefault()) ;

//系统默认时区的当前时间
LocalDateTime localDateTime = LocalDateTime.now() ;
System.out.println("本地当前时间:" + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSSS") .format(localDateTime));

//根据本地时间计算指定时区的当地时间
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Chongqing")) ;
System.out.println(zonedDateTime.getOffset() + "--> " +DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSSS") .format(zonedDateTime));

//给时间添加上指定的时区
ZonedDateTime zonedDate = ZonedDateTime.of(localDateTime, ZoneId.of("Asia/Shanghai"));
System.out.println(zonedDate.getOffset() + "--> " + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSSS") .format(zonedDate));

ZonedDateTime hkZonedDate = ZonedDateTime.of(localDateTime, ZoneId.of("Asia/Hong_Kong"));
System.out.println(hkZonedDate.getOffset() + "--> " + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSSS") .format(hkZonedDate));

ZonedDateTime gmtZonedDate = ZonedDateTime.of(localDateTime, ZoneId.of("GMT"));
System.out.println(gmtZonedDate.getOffset() + "--> " + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSSS") .format(gmtZonedDate));

//将ZonedDateTime转换为LocalDateTime
LocalDateTime gmt2LocalDateTime = LocalDateTime.from(gmtZonedDate) ;
System.out.println("本地当前时间:" + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSSS") .format(gmt2LocalDateTime));

//计算两个带有时区时间的相差时间(时差)
long hour = ChronoUnit.HOURS.between(zonedDate,gmtZonedDate) ;
System.out.println("间隔小时:" + hour);

//指定偏移量后的时间
Instant instant = localDateTime.toInstant(ZoneOffset.of("+12")) ;
System.out.println("指定偏移量后的时间:" + DateTimeFormatter.ISO_INSTANT.format(instant));

其输出的结果:

本机默认时区:Asia/Shanghai
本地当前时间:2020-12-05 13:04:17:1370
+08:00--> 2020-12-05 13:04:17:1370
+08:00--> 2020-12-05 13:04:17:1370
+08:00--> 2020-12-05 13:04:17:1370
Z--> 2020-12-05 13:04:17:1370
本地当前时间:2020-12-05 13:04:17:1370
间隔小时:8
指定偏移量后的时间:2020-12-05T01:04:17.137Z
标签: