如何在Java 8上使用LocalDateTime.now获取当前的LocalDateTime包括秒

问题描述

我通过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,因为将LocalDateTimeString连接使用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

并仅将秒的零分数截断,但不触及秒。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...