Parsing timestamp as LocalDateTime
我想以yyyy-MM-dd'T'HH:mm:ss的形式解析时间戳为LocalDateTime。 这样做时,如果它们是00,它会剥离秒数。
如此处所述,我需要使用自定义格式化程序
1 2 3 4 5 6 7
| LocalDateTime date = LocalDateTime. parse("2008-10-02T12:30:00");
DateTimeFormatter f = DateTimeFormatter. ofPattern("yyyy-MM-dd'T'HH:mm:ss");
String dateString = date. toString();
String dateFormatted = date. format(f );
System. out. println(dateString ); // 2008-10-02T12:30 |
这个工作,但它返回String:
1
| System. out. println(dateFormatted ); // 2008-10-02T12:30:00 |
当我将字符串解析为LocalDateTime时,它再次剥离00:
1 2
| LocalDateTime dateLDT = LocalDateTime. parse(dateFormatted, f );
System. out. println(dateLDT ); // 2008-10-02T12:30 |
那么如何将日期解析为LocalDateTime而不是String,并将00保留在最后?
-
你需要解析dateFormatted,问题出在哪里?你不能解析LocalDateTime,你只能解析String - 并且String必须具有正确的格式。并且日期选择如何重载其toString方法对您来说无关紧要,因为您始终必须使用格式化程序来获取任何正确的格式。
-
可能的重复如何从一个长纪元时间以毫秒为单位创建Java 8 LocalDate?
-
我相信DateTimeFormatterBuilder提供了可选元素,但您需要使用它
-
似乎你打算打印和解析dateFormatted,而不是dateString
-
@ernest_k:请看我的更新。它再次剥离了00-es。
-
这并不重要 - 我重复我已经说过的话:"日期选择如何重载其toString方法应该对你不重要,因为你总是必须使用格式化程序来获得任何正确的格式。"
-
@ luk2302:格式化程序的输出是一个String,但我需要一个LocalDateTime。
-
在LocalDateTime中无法摆脱'T'的可能(近)重复
-
LocalDateTime内部使用我们不关心的格式,并且谈论它是否有秒数是没有意义的。如果秒和小数秒为零,则只有toString方法生成一个没有秒的字符串。
你应该期望两者之间的输出有所不同
1 2
| LocalDateTime dateLDT = LocalDateTime. parse(dateFormatted, f );
System. out. println(dateLDT ); |
和
1
| System. out. println(dateLDT. format(f )) //or f.format(dateLDT) |
System.out.println(dateLDT);打印dateLDT.toString()的值,预计不会产生与模式相同的输出。
当你看LocalDateTime.toString()时,你会看到它将时间部分委托给LocalTime.toString(),它有条件地打印秒:
1 2 3 4 5 6 7 8 9
| public String toString () {
...
if (secondValue > 0 || nanoValue > 0) {
buf. append(secondValue < 10 ?":0" :":"). append(secondValue );
...
}
}
return buf. toString();
} |
如果其值0,它只是省略秒字段。
如果您必须确定输出/输入格式,在这种情况下您需要做的是始终使用DateTimeFormatter格式化日期。
每个日期对象都有秒。它是否选择使用默认的toString实现来显示它们并不重要。如果您需要特定格式,则始终需要使用格式化程序。
如果要查看秒数,请使用正确的格式化程序或设置断点并检查对象。查看任何toString的任何实现都不能保证显示任何有用的或代表实际的对象状态。该对象可以只返回一个随机日期字符串。
现在你可以使用date,它非常好,它有几秒钟。