2011-04-06 53 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日曆對象總是有點麻煩。