Java 8 在LocalDate实例上调用format(基本\u ISO\u日期)时,引发偏移量为秒的UnsupportedTemporalTypeException

Java 8 在LocalDate实例上调用format(基本\u ISO\u日期)时,引发偏移量为秒的UnsupportedTemporalTypeException,java-8,java-time,Java 8,Java Time,我打开了IDE中所有异常的中断,在每次调用localDateInstance.format(DateTimeFormatter.BASIC\u ISO\u DATE)时都会看到UnsupportedTemporalTypeException弹出窗口 这是正常行为还是错误? 堆栈跟踪在LocalDate的get0方法中,传递的参数是OFFSET\u SECONDS 进一步看,我发现基本的ISO日期定义如下: BASIC_ISO_DATE = new DateTimeFormatterBui

我打开了IDE中所有异常的中断,在每次调用
localDateInstance.format(DateTimeFormatter.BASIC\u ISO\u DATE)
时都会看到
UnsupportedTemporalTypeException
弹出窗口

这是正常行为还是错误?

堆栈跟踪在
LocalDate
get0
方法中,传递的参数是
OFFSET\u SECONDS

进一步看,我发现基本的ISO日期定义如下:

    BASIC_ISO_DATE = new DateTimeFormatterBuilder()
            .parseCaseInsensitive()
            .appendValue(YEAR, 4)
            .appendValue(MONTH_OF_YEAR, 2)
            .appendValue(DAY_OF_MONTH, 2)
            .optionalStart()
            .appendOffset("+HHMMss", "Z")
            .toFormatter(ResolverStyle.STRICT, IsoChronology.INSTANCE);
有问题的位看起来像带有时区偏移的
.optionalStart()
部分


我认为这是标准库的草率设计/实现。可选的格式化部分不应导致抛出和捕获异常,从而降低性能,而库的用户不知道该异常。

异常不会被抛出到调用
format
的行;在返回之前,它会被扔到堆栈的某个地方并被捕获。您是否启用了IDE中所有异常的中断?我没有任何具体的代码示例。您是否将日期格式化为您实际注意到由于此设计缺陷而导致性能下降的速率?如果是这样的话,你应该提交一份bug报告,如果不是这样的话,那么你仍然可以提交一份关于糟糕设计的bug报告,尽管从外部看它并不明显。我怀疑讨论它是否在SO的范围内,而且,如果我们开始讨论JRE实现中的每一个代码气味,那么SO会爆炸……是的,这是正常的行为,但也很糟糕,因为由于内部抛出和捕获观察到的异常,性能会下降。正如霍尔格所说,你可以提交一个bug报告,或者你可以尝试减少应用程序中可选格式部分的使用,或者你可以尝试我的库Time4J,它有一个更好的格式引擎。另见。