Java 8 偏移日期解析
Java 8 Offset Date Parsing
我需要将以下格式的字符串 2015-01-15-05:00
解析为 UTC 中的 LocalDate(或其他)。
问题是下面的代码:
System.out.println(LocalDate.parse("2015-01-15-05:00", DateTimeFormatter.ISO_OFFSET_DATE));
输出2015-01-15
忽略偏移量。期望的输出是 2015-01-16
提前致谢!
看来我找到了解决办法。这是:
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());
最简单的答案就是用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
在处理time-zones时很有用,但是当你只处理偏移量时,OffsetDateTime
更简单。
一般来说,应用程序代码不应包含 TemporalAccessor
类型的变量。如果你看到了,通常会有更好的方法。
我需要将以下格式的字符串 2015-01-15-05:00
解析为 UTC 中的 LocalDate(或其他)。
问题是下面的代码:
System.out.println(LocalDate.parse("2015-01-15-05:00", DateTimeFormatter.ISO_OFFSET_DATE));
输出2015-01-15
忽略偏移量。期望的输出是 2015-01-16
提前致谢!
看来我找到了解决办法。这是:
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());
最简单的答案就是用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
在处理time-zones时很有用,但是当你只处理偏移量时,OffsetDateTime
更简单。
一般来说,应用程序代码不应包含 TemporalAccessor
类型的变量。如果你看到了,通常会有更好的方法。