Java Joda time无法分析DateTimeFormat::longTime
我最近遇到了Joda,我在解析一个简单的代码片段时遇到了问题:Java Joda time无法分析DateTimeFormat::longTime,java,parsing,time,jodatime,Java,Parsing,Time,Jodatime,我最近遇到了Joda,我在解析一个简单的代码片段时遇到了问题: String localTimeString = LocalTime.now().toString(dateTimeFormatter); LocalTime localTime = LocalTime.parse(localTimeString, dateTimeFormatter); 结果根据所使用的DateTimeFormatter而有所不同: DateTimeFormatter DateTimeFormatter=Date
String localTimeString = LocalTime.now().toString(dateTimeFormatter);
LocalTime localTime = LocalTime.parse(localTimeString, dateTimeFormatter);
结果根据所使用的DateTimeFormatter
而有所不同:
DateTimeFormatter DateTimeFormatter=DateTimeFormat.forPattern(“HH:mm:ss”)代码>
DateTimeFormatter DateTimeFormatter=DateTimeFormat.longTime()代码>
localTimeString
的值为13:23:45
,打印解析后的localTimeString
将正确生成13:23:45.000
localTimeString
是1:23:45 PM
,但是,以下行会导致异常:
java.lang.IllegalArgumentException:无效格式:“1:23:45 PM”太短
为什么它无法解析自己?我想我做错了什么事?我真的不知道乔达的时间,但我有一个猜测,听起来很符合我自己的想法。我试过这个:
DateTimeFormatter dateTimeFormatter
= DateTimeFormat.longTime().withLocale(Locale.US);
String timeString = DateTime.now().toString(dateTimeFormatter);
System.out.println("timeString: \"" + timeString + '"');
在我位于欧洲/哥本哈根时区的计算机上,它刚刚打印:
时间字符串:“CEST下午3:19:09”
因此,DateTimeFormat.longTime()
似乎包含一个时区缩写(这里CEST表示中欧夏季时间)。显然,代码中发生的是:
- 由于
不包括时区,因此其LocalTime
方法使用空字符串作为时区缩写来格式化时间。它确实包括时间和时区缩写之间的空间。在您引用的例外情况下(以及我在这里复制它时),在toString
之后有一个空格PM
更为严格,它反对字符串中缺少时区缩写LocalTime.parse