Java Joda time无法分析DateTimeFormat::longTime

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

我最近遇到了Joda,我在解析一个简单的代码片段时遇到了问题:

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也没有帮到我


    为什么它无法解析自己?我想我做错了什么事?

    我真的不知道乔达的时间,但我有一个猜测,听起来很符合我自己的想法。我试过这个:

        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
      更为严格,它反对字符串中缺少时区缩写

    ha!非常有趣…我看到您标记了这个java-8。您考虑过使用java.time吗?尤达现在有点过时了。@JanLarsen:我错了,我的意思是只有约达时间。你的模式“hh:mm:ss”没有意义,用“hh:mm:ss”或“hh:mm:ss a”。@MenoHochschild:我的打字错误,但它是不相关的。我的问题是针对其他任何地方的/