Java日期解析时区导致解析错误
我收到带有以下代码的ParseException,似乎无法修复它:Java日期解析时区导致解析错误,java,date,string-formatting,Java,Date,String Formatting,我收到带有以下代码的ParseException,似乎无法修复它: String date = "Tue Mar 13 2012 10:48:05 GMT-0400"; SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zzzX"); //Tried zzzZ at the end as well System.out.println(format.parse(date)); 如果我去掉simple
String date = "Tue Mar 13 2012 10:48:05 GMT-0400";
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zzzX"); //Tried zzzZ at the end as well
System.out.println(format.parse(date));
如果我去掉simpleDataFormat末尾的-0400和X(或Z),一切正常,但一旦它出现在代码中,它就不起作用了。我应该用什么符号来代替?我正在使用Java7
以下是我收到的解析错误:
java.text.ParseException: Unparseable date: "Tue Mar 13 2012 10:48:05 GMT-0400"
at java.text.DateFormat.parse(DateFormat.java:357)
java.text.ParseException: Unparseable date: "Tue Mar 13 2012 10:48:05 GMT-0400"
at java.text.DateFormat.parse(DateFormat.java:357)
at com.throwaway.parse.DateParsing.testDate(TestDate:17)
模式
zzzz
只能解析“GMT-04:00”样式的字符串。您的示例可以使用以下模式进行分析:EEE-MMM-dd-yyyy-HH:mm:ss-Z
使用“EEE-MMM-dd-yyyy-HH:mm:ss-zzz”
zzz
代表GMT
,Z
代表“RFC 822时区”
请参考
字符串的
GMT-0400
部分的GMT
导致问题。Z
(或java 7中的X
)参数仅匹配-4000
。您必须使用如下单引号转义GMT
:
DateFormat format = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z", Locale.US);
请注意,将
Local
放在日期格式中也是一个很好的做法。如果没有它,您的代码将无法在其他国家工作(如法国……。如果您总是希望您的时区以这种方式表示,您可以在格式字符串中的单引号中添加“GMT”,以防止对其进行解析:
EEE MMM dd yyyy HH:mm:ss 'GMT'XX
不过,没有一种内置格式可以解析它,这有点奇怪。当Javadoc将
GMT-08:00
列为z
?三个问题都涉及混合使用时,可能是不正确的。要么:
- z一般时区太平洋标准时间;PST;GMT-08:00
- Z RFC 822时区-0800
- X ISO 8601时区-08-0800; -08:00
ParseException
我猜很遗憾,这也不行。如果我拿出-0400,去掉原始格式末尾的X或Z,日期解析就很好了。我已经试过了,我应该在问题中说得更清楚一点。如果你能在GMT和-0400之间加一个空格,你就可以解析日期了,你输入字符串的来源是什么,但我不太确定我是否总能指望时区返回GMT,有人可能会切换服务器设置,我可能会得到EST或PST或任何情况。我想你的时区格式“GMT-0400”等于常见的“-0400”,其中“GMT”是隐式的。当用小时和分钟来描述时区时,它总是以GMT作为参考。类似于“EST-0400”的东西是一种非常奇怪的表示时区的方式。另外,如果您控制字符串的生成方式,您可以更改时区格式,使其不那么模棱两可