问题描述
我通过LocalDateTime.Now()在 Java 8 中获得LocalDateTime。但是有时,此Now()函数以没有秒的格式将时间返回给我。我以为是因为第二个是零,但是我需要秒。
代码:
List <LocalDateTime> times = Arrays.asList(
LocalDateTime.Now(),LocalDateTime.parse("2020-09-13T20:53",DateTimeFormatter.ISO_LOCAL_DATE_TIME),LocalDateTime.parse(LocalDateTime.Now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME))
);
for (LocalDateTime time: times)
System.out.println("Time: " + time);
控制台:
Time: 2020-09-13T18:42:25.775
Time: 2020-09-13T20:53
Time: 2020-09-13T18:42:25.779
Time: 2020-09-13T20:53
还没有秒。
PD:我有一个调度程序,每30秒运行一次“ LocalDatetime.Now()”。这就是控制台中显示的内容。
2020-09-10T09:14:00.001
2020-09-10T09:14:30.001
2020-09-10T09:15:00.001
2020-09-10T09:15:30.001
2020-09-10T09:16:00.001
2020-09-10T09:16:30
2020-09-10T09:17
2020-09-10T09:17:30.001
2020-09-10T09:18:00.001
2020-09-10T09:18:30
2020-09-10T09:19:00.001
2020-09-10T09:19:30.001
2020-09-10T09:20:00.001
2020-09-10T09:20:30
2020-09-10T09:21:00.001
2020-09-10T09:21:30
2020-09-10T09:22:00.001
2020-09-10T09:22:30.001
2020-09-10T09:23
2020-09-10T09:23:30.001
2020-09-10T09:24
2020-09-10T09:24:30
2020-09-10T09:25
2020-09-10T09:25:30
2020-09-10T09:26:00.001
2020-09-10T09:26:30
解决方法
这是Java 8中LocalDateTime的功能-如果秒数是“ 00”,则它将丢弃它。
您可以详细了解here
,一种方法是为输出创建特定的DateTimeFormatter
,因为将LocalDateTime
与String
连接使用toString()
方法,该方法将截断零毫秒或什至秒
这样做,例如:
public static void main(String[] args) {
DateTimeFormatter isoDtf = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
List <LocalDateTime> times =
Arrays.asList(LocalDateTime.now(),LocalDateTime.parse("2020-09-13T20:53",isoDtf),LocalDateTime.parse(LocalDateTime.now().format(isoDtf)));
// specify the output format,require the units you need explicitly
DateTimeFormatter outputFormatter = DateTimeFormatter
.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSS");
// and explicitly output the formatter LocalDateTime
for (LocalDateTime time: times)
System.out.println("Time: "+ time.format(outputFormatter));
}
此输出
Time: 2020-09-15T15:09:08.011
Time: 2020-09-13T20:53:00.000
Time: 2020-09-15T15:09:08.027
如果只需要秒,则内置格式器(用于解析的格式器)就足够了,因为以下代码
public static void main(String[] args) {
DateTimeFormatter isoDtf = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
List <LocalDateTime> times =
Arrays.asList(LocalDateTime.now(),LocalDateTime.parse(LocalDateTime.now().format(isoDtf)));
// and explicitly output the formatter LocalDateTime
for (LocalDateTime time: times)
System.out.println("Time: "+ time.format(isoDtf));
}
输出
Time: 2020-09-15T15:12:55.592
Time: 2020-09-13T20:53:00
Time: 2020-09-15T15:12:55.623
并仅将秒的零分数截断,但不触及秒。