java.time 通过 ThreeTen Backport
java.time 是现代 Java 日期和时间 API。我建议我们将它用于我们的日期和时间工作。它是 Joda-Time 的继任者,并于 2014 年推出 Java 1.8。它还在 ThreeTen Backport 中向后移植到 Java 1.6 和 1.7。使用 ThreTen Backport,我们可以这样做:
String startTime = "2021-01-07T10:42";
OffsetDateTime utcTime = LocalDateTime.parse(startTime)
.atZone(ZoneId.systemDefault())
.toOffsetDateTime()
.withOffsetSameInstant(ZoneOffset.UTC);
System.out.println(utcTime);
我在亚洲/上海时区的 Java 1.7 上运行了这段代码(偏移量 +08:00)。然后输出是:
2021-01-07T02:42Z
时间与你想要的一致。它采用 UTC 格式,由结尾的. 表示Z
。
如果您想明确从哪个时区转换,而不是ZoneId.systemDefault()
使用类似ZoneId.of("Asia/Hong_Kong")
. 最好以区域/城市格式提供相关时区 ID,而不是仅仅提供 GMT 偏移量。
为什么要使用外部库进行转换?java.time 是面向未来的日期和时间库。一旦您继续使用 Java 8、9、10、11、12、13、14、15、16 或更高版本,更改您的导入以使用内置的 java.time,再次测试,您的代码是最现代的。请注意代码是如何明确转换为 UTC 的,这并不奇怪。java.time 非常好用。
链接