Java Joda时间无法解析DateTimeFormat :: longTime

尼古拉斯:

我最近遇到过Joda,但解析时遇到了困难,LocalTime如一个简单的代码片段所示:

String localTimeString = LocalTime.now().toString(dateTimeFormatter);
LocalTime localTime = LocalTime.parse(localTimeString, dateTimeFormatter);

结果根据DateTimeFormatter使用情况而有所不同

  1. DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("HH:mm:ss");
  2. DateTimeFormatter dateTimeFormatter = DateTimeFormat.longTime();

我对结果感到惊讶:

  1. 第一个工作正常,localTimeString具有的值13:23:45正确打印解析的localTimeString结果13:23:45.000

  2. 我在这里挣扎。localTimeString1:23:45 PM,然而,在异常以下行的结果:

    java.lang.IllegalArgumentException:无效格式:“ 1:23:45 PM”太短

我没有发现任何类似的问题,Joda JavaDoc都没有帮助我。

为什么DateTimeFormat::longTime无法自行解析?我想我做错了什么-那是什么?

Ole VV:

我不太了解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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章