Java LocalDateTime:将字符串转换为HH:mm:ss
我需要做什么:Java LocalDateTime:将字符串转换为HH:mm:ss,java,datetime,localtime,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” 已
我需要将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
已解析为18:14,类型为java.time.format.Parsed
您有一个时间组件,而不是日期组件。因此(利用现有资源)最好使用
LocalTime
(而不是LocalDateTime
)。像
“无法获取LocalDateTime”异常是因为解析的文本只有时间值,没有日期值,因此不可能构造本地日期时间对象
改为解析到一个:
“HH:mm:ss”
模式是LocalTime
的默认模式,因此无需指定它(请参见:)
如果您想要/需要一个对象,其解析方式与它的解析方式类似,即默认为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
“未工作”不是错误描述。您是否得到了错误的输出或异常?@Jens我下次会更准确地说,我得到了一个异常:java.time.format.DateTimeParseException:无法解析文本“18:14:00”:无法从TemporalAccessor获取LocalDateTime:{},ISO解析为18:14,类型为java.time.format。解析为“无法获取LocalDateTime”因为解析的文本只有时间值,没有日期值,所以不可能构造LocalDateTime对象。而且您甚至不需要传递第二个参数。漂亮的答案涵盖了不同的选项,谢谢。在后一种情况下,我想我应该在day(LocalDate.EPOCH)执行
LocalDateTime-dateTime=LocalTime.parse(“18:14:00”)代码>(不确定何时引入了LocalDate.EPOCH
,可能是Java9)。
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
Date date = new SimpleDateFormat("HH:mm:ss").parse("18:14:00");
System.out.println(date); // Prints: Thu Jan 01 18:14:00 EST 1970