以下代码返回一个空字符串:
LocalDateTime.parse("2018-01-01T00:00:00.00")
.format(new DateTimeFormatterBuilder().toFormatter())
我希望有一个例外或以某种默认方式格式化的日期。
我是否在Java中发现了一个错误,或者这是根据规范?我在Javadoc中找不到有关此行为的任何信息。
答案 0 :(得分:5)
DateTimeFormatterBuilder
用于构建格式,它从空开始。您必须调用其各种方法(例如appendPattern
)来添加所需的格式。
DateTimeFormatter
有一些标准格式可以直接使用。这些使用DateTimeFormatterBuilder
来构建格式。例如:
public static final DateTimeFormatter ISO_LOCAL_DATE;
static {
ISO_LOCAL_DATE = new DateTimeFormatterBuilder()
.appendValue(YEAR, 4, 10, SignStyle.EXCEEDS_PAD)
.appendLiteral('-')
.appendValue(MONTH_OF_YEAR, 2)
.appendLiteral('-')
.appendValue(DAY_OF_MONTH, 2)
.toFormatter(ResolverStyle.STRICT, IsoChronology.INSTANCE);
}
答案 1 :(得分:5)
您的代码相当于:
LocalDateTime.parse("2018-01-01T00:00:00.00").format(DateTimeFormatter.ofPattern(""))
在所有情况下都会产生一个空字符串。
答案 2 :(得分:0)
我希望有一个例外或以某种默认方式格式化的日期
那是你的意见。但IMO,创建一个空构建器并向其添加 nothing 应该会导致猜测 - “空”格式化程序 - 或具有空模式的格式化程序,或其他任何内容。
文档没有说明会发生这种情况,但也没有说它会以某种默认方式抛出异常或格式。如果文档没有这么说,那么为什么你会期望呢?基于什么?
但最糟糕的是,只是因为你的基础上没有满足的期望,这显然是一个错误!为什么开发人员 - 尤其是蹩脚的开发人员 - 倾向于认为“哇,我发现了一个错误”当事情没有达到预期时,大部分时间都是他们的错?
为什么你首先要创建一个空模式?
“天哪,事情并没有像我预期的那样发生,所以肯定是一个错误!”
- 糟糕的开发者