Java 8偏移日期解析

时间:2016-01-15 11:43:19

标签: java java-8 timezone-offset java-time

我需要以UTC格式将以下格式2015-01-15-05:00解析为LocalDate(或其他)。 问题是以下代码:

System.out.println(LocalDate.parse("2015-01-15-05:00", DateTimeFormatter.ISO_OFFSET_DATE));

输出2015-01-15忽略偏移量。所需的输出为2015-01-16

提前致谢!

2 个答案:

答案 0 :(得分:8)

最简单的答案是使用OffsetDateTime来表示数据,但您需要默认时间:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
    .append(DateTimeFormatter.ISO_OFFSET_DATE)
    .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
    .toFormatter();
OffsetDateTime dt = OffsetDateTime.parse("2015-01-15-05:00", fmt);
LocalDate date = dt.withOffsetSameInstant(ZoneOffset.UTC).toLocalDate();

ZonedDateTime在处理时区时非常有用,但当您只处理偏移时,OffsetDateTime更简单。

通常,应用程序代码不应包含TemporalAccessor类型的变量。如果你看到了,通常会有更好的方法。

答案 1 :(得分:2)

好像我找到了解决方案。这是:

TemporalAccessor temporalAccessor = DateTimeFormatter.ISO_OFFSET_DATE.parse("2015-01-15-05:00");
ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDate.from(temporalAccessor), LocalTime.MAX, ZoneId.from(temporalAccessor));
System.out.println(zonedDateTime.withZoneSameInstant(ZoneOffset.UTC).toLocalDate());