java将本地时间(gmt+8)转换为utc时间

von4xj4u  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(614)

我想将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
我搜索了很多资源,但仍然不知道怎么做。

hc8w905p

hc8w905p1#

在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

qyzbxkaa

qyzbxkaa2#

java.time通过310后端口

time是现代的java日期和时间api。我建议我们在约会和工作时间使用它。它是joda time的继承者,并于2014年推出Java1.8。在threeten backport中,它还被后端口到Java1.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);

我在亚洲/上海时区的Java1.7上运行了这段代码(偏移量+08:00)。则输出为:
2021-01-07t02:42z
时间符合你的要求。它的单位是utc,由后面的 Z .
如果要明确表示从哪个时区转换,而不是 ZoneId.systemDefault() 使用类似 ZoneId.of("Asia/Hong_Kong") . 最好以地区/城市格式给出相关的时区id,而不仅仅是gmt偏移量。
为什么要使用外部库进行转换?time是面向未来的日期和时间库。一旦您继续使用Java8、9、10、11、12、13、14、15、16或更高版本,请将导入内容更改为使用内置的java.time,再次测试,您的代码就是最新的。注意代码是如何显式转换为utc的,这并不奇怪。与java.time一起工作真是太好了。

链接

oracle教程:date time解释如何使用java.time。
java规范请求(jsr)310,其中 java.time 第一次被描述。
三十后港工程 java.time 到Java6和Java7(jsr-310为310)。
通过desugaring提供Java8+API
threetenabp,android版threeten backport
问:如何在android项目中使用threetenabp,有非常透彻的解释。
维基百科文章:iso 8601

相关问题