1

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

所以日期应该以如下格式显示:

yyyyMMddHHmmssSSS000000000

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

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

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

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

4

2 回答 2

1

DateTimeFormatterBuilderappendPattern方法一起使用

公共 DateTimeFormatterBuilder appendPattern(字符串模式)

将指定模式定义的元素附加到构建器。

所有字母“A”到“Z”和“a”到“z”都保留为模式字母。字符“#”、“{”和“}”保留供将来使用。字符“[”和“]”表示可选模式。

你可以像这样使用它:

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
于 2015-11-03T16:03:09.453 回答
1

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

于 2015-11-03T23:34:58.013 回答