在Java中将任意from时区中的LocalDateTime转换为任意时区


  • 假设IST中的我的LocalDateTime,即(2020-08-14T15:41(
  • 需要将此ISTLocalDateTime转换为任何时区,例如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();

我建议不要在时区的日期和时间使用LocalDateTimeZonedDateTime就是这样的类。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会跟踪每个日期和时间对象的时区,这使得在转换中出错变得相当困难。这是一个很难高估的优势。

最新更新