Java 8偏移日期解析

Sta*_*yuk 9 java timezone-offset java-8 java-time

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

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

输出2015-01-15忽略偏移量.期望的输出是2015-01-16

提前致谢!

Jod*_*hen 9

最简单的答案是用来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();
Run Code Online (Sandbox Code Playgroud)

ZonedDateTime如果处理时区很有用,但是当你只处理偏移时,OffsetDateTime则更简单.

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

  • 直接和权威.谢谢你的指导! (3认同)
  • 你显然需要一天结束,所以24才有意义.我将示例保留为0,因为大多数用户可能会选择一天的开始. (3认同)