JAVA将当地时间(GMT+8)转换为UTC时间



我想将本地日期时间从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

我搜索了很多资源,但仍然不知道如何做。

在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

java.time through ThreeTen Backport

java.time是现代java日期和时间API。我建议我们在日期和时间工作中使用它。它是Joda Time的继任者,并于2014年推出Java 1.8。它还在ThreeTen Backport中被后移植到Java 1.6和1.7。使用ThreTen背包我们可以做:

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.of("Asia/Hong_Kong")的东西来代替ZoneId.systemDefault()。最好以地区/城市格式提供相关时区ID,而不仅仅是GMT偏移。

为什么要使用外部库进行转换?java.time是面向未来的日期和时间库。一旦您转到Java 8、9、10、11、12、13、14、15、16或更高版本,请将导入更改为使用内置的Java.time,再次测试,您的代码将是最先进的。请注意,代码是如何明确地转换为UTC的,发生的事情并不奇怪。java.time非常适合使用。

链接

  • Oracle教程:日期时间,解释如何使用java.Time
  • Java规范请求(JSR(310,其中首次描述了java.time
  • ThreeTen Backport项目,java.time到Java 6和7的Backport(JSR-310的ThreeTen(
  • 通过降级提供Java 8+API
  • ThreeTenABP,安卓版ThreeTen背包
  • 问题:如何在Android项目中使用ThreeTenABP,有一个非常彻底的解释
  • 维基百科文章:ISO 8601

相关内容

  • 没有找到相关文章

最新更新