LocalDateTime格式化程序始终返回至少毫秒

时间:2018-01-25 13:50:00

标签: java java-time

我需要构建一个格式化程序,每个LocalDateTime.parse("2018-01-01T00:00:00").format(...) // 2018-01-01T00:00:00.000 LocalDateTime.parse("2018-01-01T00:00:00.123456").format(...) // 2018-01-01T00:00:00.123456 对象的打印精度至少为毫秒,如果可用,则打印更多(ISO格式)。

例如,我希望以下

ZonedDateTime

java.time.DateTimeFormatter : Need ISO_INSTANT that always renders milliseconds上的答案对于yyyy-MM-dd'T'HH:mm:ss.SSS没有帮助。模式[ [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0] ]. 对我来说也不起作用,因为它正在修剪微观和纳米。

2 个答案:

答案 0 :(得分:2)

您可以用这种方式构造DateTimeFormatter以达到打印至少毫秒的效果:

DateTimeFormatter dtf =
    new DateTimeFormatterBuilder().appendPattern("uuuu-MM-dd'T'HH:mm:ss").appendFraction(
        ChronoField.NANO_OF_SECOND,
        3,
        9,
        true
    ).toFormatter();

String s1 = LocalDateTime.parse("2018-01-01T00:00:00").format(dtf);
String s2 = LocalDateTime.parse("2018-01-01T00:00:00.123456").format(dtf);  

System.out.println(s1); // 2018-01-01T00:00:00.000
System.out.println(s2); // 2018-01-01T00:00:00.123456

答案 1 :(得分:0)

参数是字母' n'放置1到9次,这给出了纳秒级。如果指定小于9倍的纳秒值将被截断为“n”的数量的长度。 ' SSS'也应该工作。格式不依赖于您正在使用它的类,因此ZonedDateTimeLocalDateTime应该工作相同,除了特定于某个类的字段,例如在这种情况下时区仅出现在{{1}中而不是ZonedDateTime。无论如何,您可以在此处阅读:Class DateTimeFormatter