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