我需要将2015-01-15-05:00格式的字符串解析为UTC中的LocalDate(或smth else)。问题是以下代码:
System.out.println(LocalDate.parse("2015-01-15-05:00", DateTimeFormatter.ISO_OFFSET_DATE));输出忽略偏移量的2015-01-15。所需的输出是2015-01-16
提前感谢!
发布于 2016-01-15 12:35:40
最简单的答案是使用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类型的变量。如果你看到这一点,通常有一个更好的方法。
发布于 2016-01-15 12:12:41
看来我找到了解决办法。下面是:
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());https://stackoverflow.com/questions/34810324
复制相似问题