2011-04-06 50 views
0

我得到下面的格式发送到我的应用日期:解析Java中的日期有一个奇怪的时区

yyyy-MM-dd'T'HH:mm:ss.SSS-04:00 

的问题是时区,这并不在Z格式(-0400 )并且它不遵循z格式(GMT-04:00)。

是否有另一种格式选项我失踪或我可以输入一种方法来解析这些时区?

+1

这是一致的行为?如果是这样,你可以使用正则表达式来重新格式化字符串。 – 2011-04-06 19:17:26

回答

2

考虑切换到Joda time - 它比java原生日期库提供了更多的灵活性和可读性,包括处理该时区样式(这是我切换的关键原因之一)。

+1

+1 OPs日期格式看起来是标准的XSD dateTime格式,它在TimeZone的中间添加了麻烦的冒号。 – Jberg 2011-04-06 20:06:31

1

幼稚的方法是快速发展和简单。

class TimeTest { 
    public static void main(String[] args) { 
     String s = "yyyy-MM-dd'T'HH:mm:ss.SSS-04:00"; 
     String t = "yyyy-MM-dd'T'HH:mm:ss.SSS-0400"; 
     System.out.println(s + " --> " + fix(s)); 
     System.out.println(t + " --> " + fix(t)); 
    } 

    static String fix(String s) { 
     int last = s.lastIndexOf(":"); 
     if(last == s.length() - 3) { 
      s = s.substring(0,last) + s.substring(last+1); 
     } 
     return s; 
    } 
} 
1

你似乎得到一个XSD DateTime格式。如果您想坚持使用纯粹的Java,请查看javax.xml.datatype.XMLGregorianCalendar,它是为处理这类事情而构建的。

但正如另一张海报所说,你可能会更容易使用第三方库,如乔达时间。 Java日历对象总是有点麻烦。