我一直在阅读关于这个主题的很多帖子,并且一直在尝试代码示例,但我似乎无法让我的解析工作。
我的表单上有一个dijit DateTextBox。我注意到,当在不同的浏览器中使用时,我会收到不同的字符串表示日期时间。例如今天的日期:
IE8:
Fri Mar 11 00:00:00 MST 2011
Mozilla / Chrome / Safari:
Thu Mar 11 2011 00:00:00 GMT-0700 (US Mountain Standard Time)
歌剧:
Thu Mar 11 2011 00:00:00 GMT-0700
在我的代码中,我创建了以下SimpleDateFormat:
private final static SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
private final static SimpleDateFormat dateFormat2 = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ (zzzz)", Locale.US);
private final static SimpleDateFormat dateFormat3 = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ", Locale.US);
然后我尝试稍后解析它:
try {
calcDate = dateFormat.parse(changeDate);
} catch (ParseException e) {
try {
calcDate = dateFormat2.parse(changeDate);
} catch (ParseException e2) {
try {
calcDate = dateFormat3.parse(changeDate);
} catch (ParseException e3) {
e3.printStackTrace();
}
}
}
到目前为止,只有IE8才能正确解析。我创建了一些语句来在解析之前输出字符串,看起来我的格式与模式匹配。
我甚至安装了joda时间库并尝试了一些这样的例子:
String currentDate = "Sun Mar 29 2009 00:00:00 GMT-0700";
DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM dd yyyy HH:mm:ss zZ");
DateTime myDate = formatter.parseDateTime(currentDate);
这给我错误'格式无效..... GMT-0700格式错误'
请让我知道我做错了什么。感谢
答案 0 :(得分:0)
您可以考虑解析表示客户端日期的字符串。因此,无论浏览器的实现如何,您的服务器都知道它将接收的格式。
答案 1 :(得分:0)
在再次看到这个之后,我想出了一个适用于上述所有浏览器的工作。
我将第二个日期格式更改为
private final static SimpleDateFormat dateFormat2 = new SimpleDateFormat("EEE MMM dd yyyy", Locale.US);
然后我从浏览器返回的日期字符串中取出前15个字符,然后像这样解析它:
try {
calcDate = dateFormat.parse(changeDate);
} catch (ParseException e) {
try {
changeDate = changeDate.substring(0, 15);
calcDate = dateFormat2.parse(changeDate);
} catch (ParseException e2) {
e2.printStackTrace();
}
}
它的工作原理应该如此。
答案 2 :(得分:0)
对于您的第二种格式,请尝试以下方法:
new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z (zzzz)")