我想将 datetime-local 从 html 转换为 UTC 时间:
html:
<label>Start Time:</label><input type="datetime-local" name="start_time" />
java:
request.getParameter("start_time") // print out ex:2021-01-07T10:42
这是当地时间(GMT+8),我想将其转换为UTC字符串时间
例如:转换为 -> 2021-01-07T02:42
我搜索了很多资源但仍然不明白该怎么做。
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")
。最好以 region/city 格式给出相关时区 ID,而不是仅仅提供 GMT 偏移量。
为什么要使用外部库进行转换? java.time 是面向未来的日期和时间库。一旦您转到 Java 8、9、10、11、12、13、14、15、16 或更高版本,请将导入更改为使用内置 java.time,再次测试,您的代码是顶级现代的。请注意代码如何明确地转换为 UTC,发生的情况并不奇怪。 java.time 非常好用。
java.time
。java.time
向后移植到 Java 6 和 7(ThreeTen for JSR-310)。在 ISO-8601 格式中,您只需将时区偏移量附加到字符串中,java.time.Instant 就知道如何处理它,如下所示:
Instant result = Instant.parse("2021-01-08T09:36:29+08:00");
System.out.println(result);
打印出:
2021-01-08T01:36:29Z