gpt4 book ai didi

java - 根据解析的 TemporalAccessor 有条件地创建 LocalDateTime、ZonedDateTime 或 OffsetDateTime

转载 作者:行者123 更新时间:2023-12-02 09:15:53 25 4
gpt4 key购买 nike

给定一个 DateTimeFormatter 定义为:

public static final DateTimeFormatter DATE_TIME = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.append( ISO_LOCAL_DATE )
.optionalStart().appendLiteral( ' ' ).optionalEnd()
.optionalStart().appendLiteral( 'T' ).optionalEnd()
.append( ISO_LOCAL_TIME )
.optionalStart().appendLiteral( ' ' ).optionalEnd()
.optionalStart().appendZoneOrOffsetId().optionalEnd()
.toFormatter();

我想根据解析是否包含区域 ID、偏移量有条件地创建 LocalDateTimeZonedDateTimeOffsetDateTime或两者都不是。

到目前为止我已经:

    DATE_TIME.parse(
text,
(temporal) -> {
// see if there is an offset
final ZoneOffset offset = temporal.query( TemporalQueries.offset() );
if ( offset != null ) {
return OffsetDateTime.from( temporal );
}

// see if there is a tz
final ZoneId zoneId = temporal.query( TemporalQueries.zoneId() );
if ( zoneId != null ) {
return ZonedDateTime.from( temporal );
}

// otherwise its a LocalDateTime
return LocalDateTime.from( temporal );
}
);

我发现区域偏移量永远不会被“识别”——即使文本包含偏移量,它也总是被报告为区域 ID。例如。给定 "1999-12-31 12:59:59 +02:00" 我期望一个 OffsetDateTime。但是,"+02:00" 始终被解析为区域 ID。最终,考虑到分区和偏移之间的相互作用,它是有效的。但出于(可能太过分)正确性的考虑,我想将它们视为 OffsetDateTime 。

我是否缺少一些能够区分的东西?

谢谢!

最佳答案

看起来这实际上是 Java 8 中的一个错误。如果将 DateTimeFormatter#parse 的值存储在 Temporal 变量中并打印其 getClass( ),使用 Java 8 编译和运行时您会收到以下内容:

class java.time.ZonedDateTime

但是,当使用 Java 11 编译并运行时,输出正是您所期望的:

class java.time.OffsetDateTime

我将搜索特定的错误报告,如果我设法找到它,则编辑此答案。这样,我们就可以确定错误的原因以及修复该错误的 Java 版本。

关于java - 根据解析的 TemporalAccessor 有条件地创建 LocalDateTime、ZonedDateTime 或 OffsetDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com