【发布时间】:2021-06-04 18:46:05
【问题描述】:
我目前收到 java.time.OffsetDateTime 的偏移量如下:
2021-06-05T18:29:31Z
2021-06-05T18:29:38.723Z
是否可以将其转换为 LocalDate 格式(yyyy-MM-dd)并返回为 java.time.OffsetDateTime?
我用 DateTimeFormatter 尝试了以下操作,但没有成功。
String offsetDateTimeString = offsetDateTime.toString();
DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd")
.toFormatter();
return OffsetDateTime.parse(offsetDateTimeString, dateTimeFormatter)
如果无法转换为 yyyy-MM-dd 格式,则也无法转换为没有区域偏移的格式。
String offsetDateTimeString = offsetDateTime.toString();
DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
.toFormatter();
OffsetDateTime offsetDateTime = OffsetDateTime.parse(offsetDateTimeString, dateTimeFormatter);
运行此代码时我得到DateTimeParseException:
java.time.format.DateTimeParseException: Text '2021-06-05T18:39:51.578Z' could not be parsed, unparsed text found at index 19
我需要在 OffsetDateTime 中以“yyyy-MM-dd”或“yyyy-MM-dd'T'HH:mm:ss”格式返回给定日期。
【问题讨论】:
-
当您对时间或偏移量都不感兴趣时,为什么您将 OffsetDateTime 作为返回类型而不是 LocalDate?
-
我只需要传递 java.time.OffsetDateTime 中的值。这是给定的要求。
-
那么你还需要有一个时间部分和一个偏移量,这就是 OffsetDateTime 需要的。您可以更改时间或偏移量,但不能将其删除。
-
OffsetDateTime将始终具有日期、时间和偏移量。它的名字是:偏移日期时间。它不能没有这三个部分之一。如果你想要一个没有时间或偏移量的日期,你需要使用LocalDate,并且有一个没有偏移量的日期和时间,你需要使用LocalDateTime。 --- 但是,您可以在 Time 和 Offset 值为 0 时创建OffsetDateTime。实际上,Z偏移量已经为 0,因此您只需将时间也更改为0。 -
仅供参考:显示值时,您始终可以选择应用自定义
DateTimeFormatter仅显示日期部分:@987654332 @