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

时间:2019-03-16 22:32:59

标签: java datetime localtime

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

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

我做了什么:
经过一些研究,我把它放了,但是没用:

LocalDateTime.parse("18:14:00", DateTimeFormatter.ofPattern("HH:mm:ss"));
  

java.time.format.DateTimeParseException:文本'18:14:00'不能是   已解析:无法从TemporalAccessor:{},ISO获得LocalDateTime   解析为类型为java.time.format.Parsed的18:14

2 个答案:

答案 0 :(得分:3)

您有时间部分,而没有日期部分。因此,您所能做的最好的就是使用LocalTime(而不是LocalDateTime)。喜欢,

LocalTime lt = LocalTime.parse("18:14:00", DateTimeFormatter.ofPattern("HH:mm:ss"));

答案 1 :(得分:3)

“无法获取LocalDateTime” 异常是因为解析的文本仅具有 time 值,没有 date 值,所以这是不可能的构造一个本地 Date Time对象。

改为解析为LocalTime

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

System.out.println(dateTime); // Prints: 18:14

"HH:mm:ss"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

为进行比较,它等于旧的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