LocalDateTime :将字符串转换为 HH:mm:ss

Spn*_*Spn -1 java datetime localtime

我需要做的是:
我需要将 LocalDateTime 对象传递给构造函数,并且我有一个值为“18:14:00”的字符串。

我的问题:
如何将字符串转换为 LocalDateTime ?

我做了什么:
经过一些研究,我把它放在了上面,但没有用:

LocalDateTime.parse("18:14:00", DateTimeFormatter.ofPattern("HH:mm:ss"));
Run Code Online (Sandbox Code Playgroud)

java.time.format.DateTimeParseException:无法解析文本“18:14:00”:无法从 TemporalAccessor 获取 LocalDateTime:{},ISO 解析为 java.time.format.Parsed 类型的 18:14

And*_*eas 5

“无法获取LocalDateTime”的例外是因为解析的文本只有时间价值,没有日期值,所以不可能构建一个本地日期时间对象。

解析为 a LocalTime

LocalTime time = LocalTime.parse("18:14:00");

System.out.println(dateTime); // Prints: 18:14
Run Code Online (Sandbox Code Playgroud)

"HH:mm:ss"模式是 a 的默认值LocalTime,因此无需指定它(请参阅:)DateTimeFormatter.ISO_LOCAL_TIME

如果您想要/需要一个LocalDateTime对象,其解析方式与SimpleDateFormat它的解析方式类似,即默认为 1970 年 1 月 1 日,那么您需要明确指定默认日期值:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
        .append(DateTimeFormatter.ISO_LOCAL_TIME)
        .parseDefaulting(ChronoField.EPOCH_DAY, 0)
        .toFormatter();
LocalDateTime dateTime = LocalDateTime.parse("18:14:00", fmt);

System.out.println(dateTime); // Prints: 1970-01-01T18:14
Run Code Online (Sandbox Code Playgroud)

为了比较,这相当于旧的SimpleDateFormat结果:

Date date = new SimpleDateFormat("HH:mm:ss").parse("18:14:00");

System.out.println(date); // Prints: Thu Jan 01 18:14:00 EST 1970
Run Code Online (Sandbox Code Playgroud)