JDK8:无法解析 LocalTime

2022-09-02 20:45:41

我设法将a解析为对象:StringLocalDate

DateTimeFormatter f1=DateTimeFormatter.ofPattern("dd MM yyyy");
LocalDate d=LocalDate.parse("26 08 1984",f1);
System.out.println(d); //prints "1984-08-26"

但是我不能对做同样的事情。这段代码:LocalTime

DateTimeFormatter f2=DateTimeFormatter.ofPattern("hh mm");
LocalTime t=LocalTime.parse("11 08",f2); //exception here
System.out.println(t);

抛出一个 :DateTimeParseException

Exception in thread "main" java.time.format.DateTimeParseException: Text '11 08' could not be parsed: Unable to obtain LocalTime from TemporalAccessor: {MinuteOfHour=8, HourOfAmPm=11},ISO of type java.time.format.Parsed
    at java.time.format.DateTimeFormatter.createError(Unknown Source)
    at java.time.format.DateTimeFormatter.parse(Unknown Source)
    at java.time.LocalTime.parse(Unknown Source)
    at com.mui.cert.Main.<init>(Main.java:21)
    at com.mui.cert.Main.main(Main.java:12)
Caused by: java.time.DateTimeException: Unable to obtain LocalTime from TemporalAccessor: {MinuteOfHour=8, HourOfAmPm=11},ISO of type java.time.format.Parsed
    at java.time.LocalTime.from(Unknown Source)
    at java.time.LocalTime$$Lambda$15/1854731462.queryFrom(Unknown Source)
    at java.time.format.Parsed.query(Unknown Source)
    ... 4 more

我做错了什么?


答案 1

如果您使用特定格式,根据 API

该字符串必须表示有效时间,并使用 DateTimeFormatter.ISO_LOCAL_TIME 进行分析。

hh mm 

24h 必须

HH mm

或 12 小时

kk mm

处理的格式必须具有以下条件:

  • 两位数表示一天中的小时。这由零预先填充以确保两位数。
  • 冒号
  • 两位数表示小时中的分钟。这由零预先填充以确保两位数。
  • 如果分钟秒数不可用,则格式已完成。
  • 冒号
  • 两位数表示分钟中的秒数。这由零预先填充以确保两位数。
  • 如果秒的纳为单位为零或不可用,则格式已完成。
  • 小数点
  • 1 到 9 位,表示秒的纳秒。将根据需要输出尽可能多的数字。

答案 2

使用 ;12 小时制或 24 小时制DateTimeFormatter.ofPattern("kk mm")DateTimeFormatter.ofPattern("HH mm")

如果要解析时间,则必须将其与定义AM或PM的地方结合使用:hha

DateTimeFormatter f2 = DateTimeFormatter.ofPattern("hh mm a");
LocalTime t = LocalTime.parse("11 08 AM", f2);

推荐