2014-04-22 69 views
0

如何解析日期字符串,如2014-04-25T01:50:00.000-06:00?我使用的喬達DateTime和嘗試是這樣的:帶偏移量的日期的DateTime ParseException

public static String formatDate(Date d){ 
    SimpleDateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.00'0Z'"); 
    String mdy = mdyFormat.format(d); 
    return mdy; 
} 

但是,結果是錯誤的:

java.text.ParseException: Unparseable date: "2014-04-25T01:50:00.000-06:00"

+0

嘗試:'YYYY-MM-dd'T'HH:MM:ss.SSSZ' – Larme

+0

嘿Larme,我已經試過了,它也不能工作。 – user3560635

+1

爲什麼你的問題是「如何解析**」,​​但你的代碼是關於**格式化**日期? – Jesper

回答

0

嘗試以這種方式定義的格式爲:

DateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") 
0

如果您使用舊的JDK- SimpleDateFormat試試這個Java7模式:

yyyy-MM-dd'T'HH:mm:ss.SSSXXX 

原因是在javadoc給出:

ThreeLetterISO8601TimeZone: Sign TwoDigitHours : Minutes

如果使用JodaTime你不應該使用SimpleDateFormatJoda-solution否則你只能在一個混亂的方式混合JDK和喬達類型:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 

因爲你對Jespers的評論而更新:

如果你只是想轉換DateTimejava.util.Date那麼這既不是格式化也不是解析問題。解決方案要簡單得多。只需使用toDate()

DateTime dt = ...; 
java.util.Date jdkDate = dt.toDate(); 
0

這是標準的ISO 8601格式。如果您在使用約達時間:

DateTimeFormatter fmt = ISODateTimeFormat.dateTimeParser(); 
DateTime dateTime = fmt.parseDateTime("2014-04-25T01:50:00.000-06:00"); 

// Convert it to java.util.Date 
Date date = dateTime.toDate(); 
+0

謝謝Jesper的建議,將來對我有用。不過,我目前的問題是,我需要將DateTime轉換爲java.util.Date,並且當我嘗試將值解析爲Date時,我得到此異常。 – user3560635

+0

將Joda'DateTime'轉換爲'java.util.Date'非常簡單;你只需調用'toDate()'就可以了。我會更新我的答案。 – Jesper