我找到的每个解决方案都将日期/时间值“序列化”为字符串,然后再将其解析为所需的时区。这似乎是一种效率低下的方法。我正在使用java SE 8,似乎有更好的支持使用新类处理时区(尽管我不熟悉java SDK)。我和他们一起玩,以下,相当简单的解决方案似乎工作正常,但没有日期/时间的字符串表示作为中间人。
ZonedDateTime localDateTime = ZonedDateTime.now();
System.out.println(localDateTime);
ZonedDateTime utcDateTime = ZonedDateTime.ofInstant(
localDateTime.toInstant(),
ZoneOffset.UTC
);
System.out.println(utcDateTime);
结果:
2015-01-07T11:02:43.368-05:00[America/New_York]
2015-01-07T16:02:43.368Z
我过度简化了吗?
答案 0 :(得分:0)
您的方法有效,但有更简洁的方法,请参阅:https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html#withZoneSameInstant-java.time.ZoneId-
这样的事情应该有效:
localDateTime.withZoneSameInstant(ZoneId.of("UTC"));