文
章
目
录
章
目
录
在本文中我们通过易于理解的Java示例来学会如何实现LocalDateTime和ZonedDateTime之间的相互转换。
LocalDateTime的实例表示没有时区的日期时间(精确到纳秒)。它代表ISO-8601日历系统中的本地时间线上的一个点。在没有额外信息(如偏移量或时区)的情况下,它无法表示整个时间线上的瞬间。
ZonedDateTime的实例表示整个时间线上的一个瞬间。它是日期,时间和区域信息的组合。
ZonedDateTime = LocalDateTime + ZoneId
1.LocalDateTime如何转为ZonedDateTime
要将LocalDateTime转换为ZonedDateTime,我们必须将区域偏移量添加到本地日期时间。无论我们添加的时区信息是什么,所构建的对象将代表具有配置偏移量的宇宙时间线上的一个瞬间。
LocalDateTime ldt = LocalDateTime.now(); //本地时间
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ); //时区信息
ZonedDateTime zdtAtAsia = ldt.atZone( zoneId ); //亚洲时间本地时间
ZonedDateTime zdtAtET = zdtAtAsia
.withZoneSameInstant( ZoneId.of( "America/New_York" ) ); //与欧洲东部时间同步
程序输出:
2018-07-15T11:27:46.203763100+05:30[Asia/Kolkata]
2018-07-15T01:57:46.203763100-04:00[America/New_York]
2.ZonedDateTime 如何转为 LocalDateTime
使用ZonedDateTime.toLocalDateTime()方法获取没有时区信息的本地日期时间。
ZonedDateTime zdtAtET = ZonedDateTime.now(ZoneId.of("America/New_York"));
LocalDateTime ldt = zdtAtET.toLocalDateTime();
System.out.println(zdtAtET);
System.out.println(ldt);
程序输出:
2018-07-15T01:59:52.054839900-04:00[America/New_York]
2018-07-15T01:59:52.054839900
以上就是Java LocalDateTime和ZonedDateTime如何相互转换的全部内容。