如何将GMT日期转换为本地日期

时间:2016-08-31 03:54:47

标签: java datetime gmt

我有一个具有非标准GMT格式的日期字符串,例如" 2016-08-31T02:04:58.893GMT"。 现在我需要将其转换为本地时间格式,例如" 2016-08-31 10:04:58"。顺便说一句,我在中国,当地时间和格林尼治标准时间之间有8个小时。 哦,我使用Java。谢谢大家。

2 个答案:

答案 0 :(得分:1)

使用DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz")解析字符串。

示例代码,显示中间结果:

String input = "2016-08-31T02:04:58.893GMT";

DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");
ZonedDateTime zdtGMT = ZonedDateTime.parse(input, fmt1);
System.out.println(zdtGMT);           // prints 2016-08-31T02:04:58.893Z[GMT]

ZonedDateTime zdtChina = zdtGMT.withZoneSameInstant(ZoneId.of("Asia/Shanghai"));
System.out.println(zdtChina);         // prints 2016-08-31T10:04:58.893+08:00[Asia/Shanghai]

LocalDateTime ldt = zdtChina.toLocalDateTime();
System.out.println(ldt);              // prints 2016-08-31T10:04:58.893

DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(ldt.format(fmt2)); // prints 2016-08-31 10:04:58

答案 1 :(得分:-1)

您最好将非标准GMT格式转换为标准时间格式,然后使用一些适当的内置函数来添加或减少差异。您可以使用其他功能将标准时间格式转换为指定的格式。

这很好,因为你不必考虑复杂的案例,例如" 2016-12-31 23:00" + 8小时。