Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LocalDateTime:将字符串转换为HH:mm:ss_Java_Datetime_Localtime - Fatal编程技术网

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