- 假设IST中的我的
LocalDateTime
,即(2020-08-14T15:41( - 需要将此IST
LocalDateTime
转换为任何时区,例如IST转换为UTC
所需输出:2020-08-14T10:11//表示上午10:112020年8月14日,星期五
如果来自任何区域的任何LocalDateTime
,则将获得相应的UTC时间。
获得了将LocalDateTime从任何时区转换为任何时区的通用解决方案:
LocalDateTime localDateTimeOfFromTimeZone = LocalDateTime.now();//it's takes your default application LocalDateTime
System.out.println("From LocalDateTime : "+localDateTimeOfFromTimeZone);
ZonedDateTime fromTimeZonedDateTime = localDateTimeOfFromTimeZone.atZone(fromTimeZoneId);
LocalDateTime localDateTimeOfToTimeZone = LocalDateTime.from(fromTimeZonedDateTime.withZoneSameInstant(toTimeZoneId));
System.out.println("Converted To LocalDateTime :"+localDateTimeOfToTimeZone);
或
LocalDateTime newDateTime = oldDateTime.atZone(oldZone).withZoneSameInstant(newZone).toLocalDateTime();
我建议不要在时区的日期和时间使用LocalDateTime
。ZonedDateTime
就是这样的类。LocalDateTime
正是一个没有时区的日期和时间。
ZoneId fromTimeZoneId = ZoneId.of("Asia/Kolkata");
ZoneId toTimeZoneId = ZoneId.of("Etc/UTC");
ZonedDateTime dateTimeOfFromTimeZone = ZonedDateTime.now(fromTimeZoneId);
System.out.println("From ZonedDateTime: " + dateTimeOfFromTimeZone);
ZonedDateTime dateTimeOfToTimeZone
= dateTimeOfFromTimeZone.withZoneSameInstant(toTimeZoneId);
System.out.println("Converted To ZonedDateTime: " + dateTimeOfToTimeZone);
我刚才运行代码时的输出:
From ZonedDateTime: 2020-08-15T00:13:19.519646+05:30[Asia/Kolkata] Converted To ZonedDateTime: 2020-08-14T18:43:19.519646Z[Etc/UTC]
当使用ZonedDateTime
而不是LocalDateTime
时,Java会跟踪每个日期和时间对象的时区,这使得在转换中出错变得相当困难。这是一个很难高估的优势。