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

Jak*_*llo 2 java spring localdate localdatetime datetimeformatter

我使用 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);
Run Code Online (Sandbox Code Playgroud)

安慰:

Time: 2020-09-13T18:42:25.775
Time: 2020-09-13T20:53
Time: 2020-09-13T18:42:25.779
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Spe*_*ric 7

这是 Java 8 中 LocalDateTime 的一个特性——如果秒是“00”,那么它会丢弃它。

你可以在这里了解更多信息


deH*_*aar 6

一种方法是DateTimeFormatter为输出创建一个特定的,因为将LocalDateTime与 a连接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));
}
Run Code Online (Sandbox Code Playgroud)

这输出

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));
}
Run Code Online (Sandbox Code Playgroud)

如果您只想要秒数,内置格式化程序(您用于解析的格式化程序)就足够了,因为以下代码

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)));
    // and explicitly output the formatter LocalDateTime
    for (LocalDateTime time: times)
        System.out.println("Time: "+ time.format(isoDtf));
}
Run Code Online (Sandbox Code Playgroud)

产出

Time: 2020-09-15T15:09:08.011
Time: 2020-09-13T20:53:00.000
Time: 2020-09-15T15:09:08.027
Run Code Online (Sandbox Code Playgroud)

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

  • 非常感谢!这就是我所需要的。 (2认同)