用尾随零填充 DateTimeFormatter

Pad DateTimeFormatter with traling zeros

我正在创建一个应用程序,用户可以在其中选择日历中的日期和时间,然后该日期和时间应在文本字段中显示为 26 位数字,并用尾随零填充日期。

因此日期应按以下格式显示:

yyyyMMddHHmmssSSS000000000

所以在毫秒 (SSS) 之后我想用 9 个零填充字符串。问题是,如果不在模式字母和零常量之间添加空格,这似乎是不可能的。

有趣的是,如果我这样做 DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS000000000"),我会得到一个 DateTimeParseException,但字符串实际上在文本字段中按需要格式化。问题是,当用 try-catch 块围绕 DateTimeFormatter 的实例化时,Eclipse 告诉我 Unreachable catch block for DateTimeParseException. This exception is never thrown from the try statement body 因为异常是在我的文本字段的某些依赖项 class 中抛出的。此外,捕获每次执行代码时都会抛出的错误似乎是一种不好的做法。

DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS 000000000") 编译。但我真的需要它是一个没有任何空格的字符串。

这可能吗?我目前正在使用 java.time.format.DateTimeFormatter,但如果有一些 class 在那里扩展它,我想使用它也可以。尽管我更愿意避免添加额外的依赖项。

使用DateTimeFormatterBuilder with the appendPattern方法

public DateTimeFormatterBuilder appendPattern(String pattern)

Appends the elements defined by the specified pattern to the builder.

All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters. The characters '#', '{' and '}' are reserved for future use. The characters '[' and ']' indicate optional patterns.

你可以这样使用它:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
public class TimeFormatteTest {
    public static void main(String[] args){
        DateTimeFormatterBuilder dtfb = new DateTimeFormatterBuilder();
        dtfb.append(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
        dtfb.appendPattern("000000000");
        DateTimeFormatter dtf = dtfb.toFormatter();
        System.out.println(dtf.format(LocalDateTime.now()));
    }
}

输出将采用以下形式:

20151104003532968000000000

使用DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS'000000000'")