使用各种浏览器的时区解析DateTime字符串

时间:2011-03-11 17:24:40

标签: java parsing datetime cross-browser date-format

我一直在阅读关于这个主题的很多帖子,并且一直在尝试代码示例,但我似乎无法让我的解析工作。

我的表单上有一个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格式错误'

请让我知道我做错了什么。感谢

3 个答案:

答案 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)")