在Java 8中格式化LocalDateTime时,默认DateTimeFormatter返回空字符串

时间:2018-01-25 12:51:21

标签: java datetime java-8 datetime-format java-time

以下代码返回一个空字符串:

LocalDateTime.parse("2018-01-01T00:00:00.00")
    .format(new DateTimeFormatterBuilder().toFormatter())

我希望有一个例外或以某种默认方式格式化的日期。

我是否在Java中发现了一个错误,或者这是根据规范?我在Javadoc中找不到有关此行为的任何信息。

3 个答案:

答案 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 应该会导致猜测 - “空”格式化程序 - 或具有空模式的格式化程序,或其他任何内容。

文档没有说明会发生这种情况,但也没有说它会以某种默认方式抛出异常或格式。如果文档没有这么说,那么为什么你会期望呢?基于什么?

但最糟糕的是,只是因为你的基础上没有满足的期望,这显然是一个错误!为什么开发人员 - 尤其是蹩脚的开发人员 - 倾向于认为“哇,我发现了一个错误”当事情没有达到预期时,大部分时间都是他们的错?

为什么你首先要创建一个空模式?

“天哪,事情并没有像我预期的那样发生,所以肯定是一个错误!”

- 糟糕的开发者