2011-03-22 164 views
1

我需要將字符串時間戳值轉換爲Java日期對象。該字符串的格式爲「2011-03-16T09:00:00-05:00」。是否有時區表示我可以使用SimpleDateFormat作爲Date對象加載這些數據? 'z','Z'和'zzzz'是我知道的唯一時區表示,並且這些表示都不能代表我的時區數據(-05:00)。有沒有人解決過這個問題?Java時間戳字符串解析

謝謝。

+1

你應該能夠匹配 「00:00-05:00」 用單個'z'(小寫)。這不行? – 2011-03-22 20:15:33

+0

我認爲:符號將其拋棄:SimpleDateFormat需要「-0500」,而不是「-05:00」。解決此問題的一種方法 - 咬住子彈,手動刪除冒號,然後將其傳遞給SimpleDateFormat – iluxa 2011-03-22 20:21:11

+0

您可以發佈一些代碼嗎?有幾種不同的方式可以解決這個問題,我們如何回答取決於您使用的是哪一種。 – Pops 2011-03-22 20:23:19

回答

0

不幸的是,在該時間段結腸問題複雜化了一點。你可能想看看this question

1

JodaTime可能會有所幫助。考慮使用它和一個自定義格式器(稱爲「怪異格式器」)。

http://joda-time.sourceforge.net/userguide.html#Input_and_Output

+0

謝謝。這是一個很好的解決方案。現在,因爲我只需要一個奇數的情況下,我會考慮eaj建議的一些字符串正則表達式,並使用相同的舊SimpleDateFormat。不管怎麼說,多謝拉。 – pjames 2011-03-22 21:10:47

+0

沒問題。你最終會來到喬達時間。帶了我幾個項目來購買它。 :d – Freiheit 2011-03-24 16:22:27

0

鑑於此時間戳格式提供看起來像在XML中使用的標準格式,你可以嘗試以下方法:

public static void main(String[] args) throws DatatypeConfigurationException { 

    String inDate = "2011-03-16T09:00:00-05:00"; 

    javax.xml.datatype.DatatypeFactory factory = DatatypeFactory.newInstance(); 

    javax.xml.datatype.XMLGregorianCalendar xmlGregCal = factory.newXMLGregorianCalendar(inDate); 

    java.util.GregorianCalendar gregCal = xmlGregCal.toGregorianCalendar(); 

    java.util.Date dateObj = gregCal.getTime(); 

    System.out.println("cal = " + xmlGregCal.toString()); 
    System.out.println("cal.year = " + xmlGregCal.getYear()); 
    System.out.println("cal.month = " + xmlGregCal.getMonth()); 
    System.out.println("cal.day = " + xmlGregCal.getDay()); 
    System.out.println("cal.hour = " + xmlGregCal.getHour()); 
    System.out.println("cal.minute = " + xmlGregCal.getMinute()); 
    System.out.println("cal.second = " + xmlGregCal.getSecond()); 
    System.out.println("cal.timezone = " + xmlGregCal.getTimezone()); 
    System.out.println("cal.eonAndYear = " + xmlGregCal.getEonAndYear()); 
} 

創建的輸出如下:

CAL = 2011-03 -16T09:00:00-05:00
cal.year = 2011 cal.month = 3
cal.day = 16
cal.hour = 9
cal.minute = 0
cal.second = 0
cal.timezone = -300
cal.eonAndYear = 2011