joda DateTime解析器错误

use*_*187 4 java time jodatime

我使用jodatime来解析日期时间字符串,如下所示:

    public static void main(String[]args){
        String s ="16-Jul-2009 05:20:18 PDT";
        String patterns = "dd-MMM-yyyy HH:mm:ss z";

            DateTimeFormatter fm = DateTimeFormat.forPattern(patterns);
            DateTime d=fm.parseDateTime(s);
            System.out.println(d);

    }

我明白了

Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "16-Jul-2009 05:20:18 PDT" is malformed at "PDT"
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:683)

怎么了?如何正确解析时区?

Bal*_*usC 9

来自DateTimeFormatjavadoc:

模式语法大部分兼容java.text.SimpleDateFormat- 无法解析时区名称,并支持更多符号.所有ASCII字母都保留为模式字母,其定义如下:

最好的办法是回退到SimpleDateFormat然后构造DateTime基础上Date#getTime().

String s = "16-Jul-2009 05:20:18 PDT";
String pattern = "dd-MMM-yyyy HH:mm:ss z";
Date date = new SimpleDateFormat(pattern, Locale.ENGLISH).parse(s);
DateTime d = new DateTime(date.getTime());
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)