我正在将日期/日期时间的字符串转换为OffsetDateTime,并且我有日期时间格式,该格式可能具有以下值之一
yyyy-MM-dd, yyyy/MM/dd有时候,不管有没有时间,我都需要将其转换为OffsetDateTime。
我试过以下代码
// for format yyyy-MM-dd
DateTimeFormatter DATE_FORMAT = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.parseDefaulting(ChronoField.MILLI_OF_SECOND, 0)
.toFormatter();由于它没有时间,所以我将其设置为默认值,但当我试图解析时
OffsetDateTime.parse("2016-06-06", DATE_FORMAT)就像抛错一样
线程"main“java.time.format.DateTimeParseException中的异常:文本'2016-06-06‘无法解析:无法从TemporalAccessor获得OffsetDateTime:{},OffsetDateTime解析为java.time.format.Parsed类型的2016-06-06 T00:00
有人能帮我解决这个问题吗?
发布于 2017-08-10 07:02:36
OffsetDateTime需要知道与UTC相抵的时区,因此您需要为此提供一个默认值。为ChronoField.OFFSET_SECONDS提供默认设置
DateTimeFormatter DATE_FORMAT = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.parseDefaulting(ChronoField.MILLI_OF_SECOND, 0)
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
.toFormatter();或者,您所拥有的格式对于LocalDateTime来说已经足够了。
发布于 2021-10-21 09:29:07
试着这样做:
if (!StringUtils.isEmpty(stringDate)){
OffsetDateTime offsetDateTime =
OffsetDateTime.from(LocalDate.parse(stringDate,
DateTimeFormatter.ofPattern("[yyyy-MM-dd][yyyy/MM/dd]")));
}https://stackoverflow.com/questions/45604130
复制相似问题