我最近遇到过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:无效格式:“ 1:23:45 PM”太短
我没有发现任何类似的问题,Joda JavaDoc都没有帮助我。
为什么DateTimeFormat::longTime
无法自行解析?我想我做错了什么-那是什么?
我不太了解Joda-Time,但我猜想听起来像是我自己的耳朵。我尝试了这个:
DateTimeFormatter dateTimeFormatter
= DateTimeFormat.longTime().withLocale(Locale.US);
String timeString = DateTime.now().toString(dateTimeFormatter);
System.out.println("timeString: \"" + timeString + '"');
在我位于欧洲/哥本哈根时区的计算机上,它刚刚打印:
timeString:“ CEST下午3:19:09”
因此,似乎其中DateTimeFormat.longTime()
包括时区缩写(此处为中欧夏令时的CEST)。因此,显然在您的代码中发生的是:
LocalTime
不包括时区,因此它的toString
方法使用空字符串将时间格式化为时区的缩写。它确实包括了时间与时区缩写应该在的位置之间的间隔。除了您引用(以及当我在此处重述时)之外,还有一个空格PM
。LocalTime.parse
更加严格,并且反对字符串中没有时区缩写。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句