在Java中将LocalDateTime中的任何时区转换成任何时区

问题描述

  • 假设我的LocalDateTime位于IST,即(2020-08-14T15:41)
  • 需要将此IST LocalDateTime转换为任何时区,例如IST转换为UTC

要求的输出:2020-08-14T10:11 //表示上午10:11 2020年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会跟踪每个日期和时间对象的时区,这使得在转换中犯错误变得相当困难。难以估量的优势。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...