Java 8 偏移日期解析

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

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

提前致谢!

最佳答案

最简单的答案是使用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 类型的变量。如果您看到了,通常会有更好的方法。

关于Java 8 偏移日期解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34810324/

相关文章:

java-8 - 集合和流是什么关系

java - 检索表时无法获取表中 0 位置的第一个元素?

java - java中重命名文件的最佳方法,目录中大约有500个文件

java - 为什么 for 循环在我的 Java 程序中迭代的次数超过给定条件

java - java中获取Date类型对象的format

java - 为什么 BiConsumer 功能接口(interface)接受具有返回类型的方法

java - 与 Java 11 兼容的最低 Spring 版本

sql - Postgresql 时区转换

ruby-on-rails - 为什么 delayed_job 中的时区关闭?

java - Java中的时区问题