我正在尝试使用2009-07-30T16:10:36+06:00
将yyyy-MM-dd'T'HH:mm:ssXXXXX
解析为一个日期。
但是,当我得到yyyy-MM-dd'T'HH:mm:ssXXXXX
时,我得到的输出似乎没有考虑偏移量。
有什么想法我想念的吗?
final DateTimeFormatter iso8601Formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXXXX");
final ZonedDateTime zonedDateTime = ZonedDateTime.parse("2009-07-30T16:10:36+06:00", iso8601Formatter);
final String formatted = zonedDateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"));
System.out.println(formatted);
答案 0 :(得分:2)
如果我的理解正确,则应将zone
设置为类似于withZoneSameInstant(ZoneId.of("UTC"))
final ZonedDateTime zonedDateTime = ZonedDateTime.parse("2009-07-30T16:10:36+06:00", DateTimeFormatter.ISO_OFFSET_DATE_TIME);
System.out.println("Without ZoneId: " + zonedDateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")));
System.out.println("With ZoneId: " + zonedDateTime.withZoneSameInstant(ZoneOffset.UTC).format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")));
结果
Without ZoneId: 30/07/2009 16:10:36
With ZoneId: 30/07/2009 10:10:36
答案 1 :(得分:1)
OffsetDateTime odt = OffsetDateTime.parse("2009-07-30T16:10:36+06:00");
ZonedDateTime zdt = ZonedDateTime.ofInstant(odt.toInstant(), ZoneOffset.UTC);
// 2009-07-30T10:10:36Z
首先,您没有日期区时间,这也取决于国家/地区。
然后您实际上想要格林威治时间(UTC)。
答案 2 :(得分:0)
如果您希望使用UTC时间(问题尚不清楚),则其他答案将为您提供正确的结果。由于您的数据中没有时区(例如欧洲/伦敦太平洋/拉罗通加),因此使用\
是没有意义的。 ZonedDateTime
比较合适:
OffsetDateTime
2009年7月30日10:10:36