Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java joda日期时间分析器错误_Java_Time_Jodatime - Fatal编程技术网

Java joda日期时间分析器错误

Java joda日期时间分析器错误,java,time,jodatime,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); D

我使用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); } 公共静态void main(字符串[]args){ 字符串s=“16-Jul-2009 05:20:18 PDT”; 字符串模式=“dd-MMM-yyy-HH:mm:ss-z”; DateTimeFormatter fm=DateTimeFormat.forPattern(模式); DateTime d=fm.parseDateTime(s); 系统输出打印ln(d); } 我明白了

线程“main”java.lang.IllegalArgumentException中的异常:无效格式:“16-Jul-2009 05:20:18 PDT”在“PDT”处格式不正确 位于org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:683) 怎么了?如何正确解析时区?

来自:

模式语法主要与
java.text.SimpleDataFormat
-时区名称兼容,因此无法解析,还支持一些符号。所有ASCII字母保留为模式字母,其定义如下:

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); } 您最好的选择是回到
SimpleDateFormat
,然后基于
Date\getTime()
构建
DateTime


从字符串中删除“PDT”。@Robert,这将使时间不带区域(并且可以在任意时区中解析),这无论如何都不是解决方案!嗯,我在文件里看到了。如果连模式都无法解析,我不确定在字符串中放入模式(“z”)有什么意义。@Rob:世界并不完美。@BalusC:没有,但这还不算完美。@BalusC,我求助于Java SimpleDateTime,我讨厌像jodatime这样的库,一个副本应该总是使基本功能至少与原始api一样好,时区名称的问题不是浪费用户时间。@user775187时区名称是模棱两可的。因此,joda时代的人们决定不代表他们图书馆的客户做出一些武断的决定。我不认为这是完全没有道理的。。。比如说,,
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);