Java joda日期时间分析器错误
我使用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 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
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);