我需要构建一个格式化程序,每个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]
].
对我来说也不起作用,因为它正在修剪微观和纳米。
答案 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'也应该工作。格式不依赖于您正在使用它的类,因此ZonedDateTime
或LocalDateTime
应该工作相同,除了特定于某个类的字段,例如在这种情况下时区仅出现在{{1}中而不是ZonedDateTime
。无论如何,您可以在此处阅读:Class DateTimeFormatter