Java Joda 时间无法解析 DateTimeFormat::longTime
Java Joda time is unable to parse DateTimeFormat::longTime
我最近遇到了 Joda,我在解析 LocalTime
时遇到了问题,如一个简单的片段所示:
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: Invalid format: "1:23:45 PM " is too short
我没有发现任何类似的问题,Joda JavaDoc 也没有帮助我。
为什么DateTimeFormat::longTime
无法解析自身?我想我做错了什么 - 是什么?
我不太了解 Joda-Time,但我的猜测在我自己听来是合格的。我试过这个:
DateTimeFormatter dateTimeFormatter
= DateTimeFormat.longTime().withLocale(Locale.US);
String timeString = DateTime.now().toString(dateTimeFormatter);
System.out.println("timeString: \"" + timeString + '"');
在我的 Europe/Copenhagen 时区计算机上,它刚刚打印:
timeString: "3:19:09 PM CEST"
所以 DateTimeFormat.longTime()
似乎包括时区缩写(这里的 CEST 代表中欧夏令时)。所以显然你的代码中发生的是:
- 由于
LocalTime
不包含时区,其toString
方法将时间格式化为空字符串作为时区缩写。它确实包括时间和时区缩写应该在的位置之间的 space。在你引用的例外情况下(以及当我在这里复制它时)在 PM
. 之后有一个 space
LocalTime.parse
更严格,反对字符串中缺少时区缩写。
我最近遇到了 Joda,我在解析 LocalTime
时遇到了问题,如一个简单的片段所示:
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: Invalid format: "1:23:45 PM " is too short
我没有发现任何类似的问题,Joda JavaDoc 也没有帮助我。
为什么DateTimeFormat::longTime
无法解析自身?我想我做错了什么 - 是什么?
我不太了解 Joda-Time,但我的猜测在我自己听来是合格的。我试过这个:
DateTimeFormatter dateTimeFormatter
= DateTimeFormat.longTime().withLocale(Locale.US);
String timeString = DateTime.now().toString(dateTimeFormatter);
System.out.println("timeString: \"" + timeString + '"');
在我的 Europe/Copenhagen 时区计算机上,它刚刚打印:
timeString: "3:19:09 PM CEST"
所以 DateTimeFormat.longTime()
似乎包括时区缩写(这里的 CEST 代表中欧夏令时)。所以显然你的代码中发生的是:
- 由于
LocalTime
不包含时区,其toString
方法将时间格式化为空字符串作为时区缩写。它确实包括时间和时区缩写应该在的位置之间的 space。在你引用的例外情况下(以及当我在这里复制它时)在PM
. 之后有一个 space
LocalTime.parse
更严格,反对字符串中缺少时区缩写。