如何将具有 GMT 偏移量的 DateTime 转换为 Java 中的 UTC?
How do I convert a DateTime with the GMT offset to UTC in Java?
我从有效负载中收到此日期时间:2016-09-18T11:00:00.000-04:00。
我想将其转换为 UTC。我知道我只需要获取偏移量并根据它修改小时数,但我找不到使用提供给我的格式的输入来执行此操作的语法。
预期结果:2016-09-18T15:00:00.000
我能够使用 SimpleDateFormat 做到这一点:
public static void main(String[] args) throws Exception {
SimpleDateFormat iso_8601_format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
Date date = iso_8601_format.parse("2016-09-18T11:00:00.000-04:00");
iso_8601_format.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(iso_8601_format.format(date));
}
这会导致以下输出:
2016-09-18T15:00:00.000Z
末尾的文字 'Z' 表示 "Z"ero 偏移量或 UTC。如果需要,您可以手动删除它,但如果您使用 ISO 8601 作为您选择的格式,则两者都有效。
您输入的是 ISO 格式,因此 Java 8+ 非常简单:
OffsetDateTime dateTime = OffsetDateTime.parse("2016-09-18T11:00:00.000-04:00");
OffsetDateTime utc = dateTime.withOffsetSameInstant(ZoneOffset.UTC); //2016-09-18T15:00Z
我从有效负载中收到此日期时间:2016-09-18T11:00:00.000-04:00。
我想将其转换为 UTC。我知道我只需要获取偏移量并根据它修改小时数,但我找不到使用提供给我的格式的输入来执行此操作的语法。
预期结果:2016-09-18T15:00:00.000
我能够使用 SimpleDateFormat 做到这一点:
public static void main(String[] args) throws Exception {
SimpleDateFormat iso_8601_format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
Date date = iso_8601_format.parse("2016-09-18T11:00:00.000-04:00");
iso_8601_format.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(iso_8601_format.format(date));
}
这会导致以下输出: 2016-09-18T15:00:00.000Z
末尾的文字 'Z' 表示 "Z"ero 偏移量或 UTC。如果需要,您可以手动删除它,但如果您使用 ISO 8601 作为您选择的格式,则两者都有效。
您输入的是 ISO 格式,因此 Java 8+ 非常简单:
OffsetDateTime dateTime = OffsetDateTime.parse("2016-09-18T11:00:00.000-04:00");
OffsetDateTime utc = dateTime.withOffsetSameInstant(ZoneOffset.UTC); //2016-09-18T15:00Z