Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8偏移日期解析_Java_Java 8_Timezone Offset_Java Time - Fatal编程技术网

Java8偏移日期解析

Java8偏移日期解析,java,java-8,timezone-offset,java-time,Java,Java 8,Timezone Offset,Java Time,我需要将以下格式的字符串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 提前谢谢 看来我找到了解决办法。这是: TemporalAccessor temporalAccessor

我需要将以下格式的字符串
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


提前谢谢

看来我找到了解决办法。这是:

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
在处理时区时很有用,但当您只处理偏移量时,
OffsetDateTime
更简单


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

直接而权威。谢谢你的指导@JodaStephen,2015-01年仍有产出-15@JodaStephen,应该是.parseDefaulting(ChronoField.HOUR\u OF_DAY,24)您显然需要一天的结束,所以24是有意义的。我将把这个示例保留为0,因为大多数用户可能会选择开始一天。为什么您认为结果必须是2015-01-16?显然,您对不存在的时钟时间应该是什么样的做出了一个不言而喻的假设(对于您所有的输入字符串总是相同的??)。对我来说,日期就像解析的一样:2015-01-15。由于缺少时间段,无法连接到UTC。