2014-04-23 35 views
0

我想在此日期格式轉換:Android - 如何解析此日期[2014-04-23T14:20:00.000-07:00]?

2014-04-23T14:20:00.000-07:00 

成日期對象,所以我可以用這個方法來獲得差異:

DateUtils.getDateDifference(DATE_OBJECT); 

...

我試着使用'SimpleDateFormat'但它引發異常,多次檢查代碼,但不起作用:

String pubDate = "2014-04-23T14:20:00.000-07:00"; 
    SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss Z", Locale.ENGLISH); 
    try { 
     Date pDate = df.parse(pubDate); 
     pubDate = "This post was published " + DateUtils.getDateDifference(pDate); 
    } catch (ParseException e) { 
     Log.e("DATE PARSING", "Error parsing date.."); 
     pubDate = "Couldn't be retrieved."; 
    } 

成功實現它的最簡單方法是什麼?

+0

'SimpleDateFormat'應該能夠處理它。 – CommonsWare

+0

http://developer.android.com/reference/java/text/SimpleDateFormat.html –

回答

2

根據Android文檔(在@MarcoAcierno註釋中給出的鏈接),您需要五次符號Z才能分析時區偏移量。請注意,在Java-6中,沒有用於處理偏移量部分冒號的內置解決方案,但Java-7引入了新符號X(這裏是三次:XXX)。 (Android!= Java)的另一個例子。所以,最終的模式如下:

SimpleDateFormat sdf = 
    new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"); 
java.util.Date d = sdf.parse("2014-04-23T14:20:00.000-07:00"); 

指定一個區域是沒有必要的,因爲你的格式不包含任何語言 - 或語言環境敏感部位(只是純粹的ISO格式)。

0

如果您使用卓越的Joda-Time庫而不是非常麻煩的java.util.Date和SimpleTextFormat類,則可以將該標準ISO 8601字符串直接傳遞給DateTime構造函數。 Joda-Time默認使用ISO 8601。

DateTime dateTime = new DateTime(pubDate); 
相關問題