2011-08-24 145 views
0
String date="2006-06-21T15:57:24.000Z"; 

如何將此字符串轉換爲Date對象而無需在Android中更改此格式?如何將字符串轉換爲日期對象?

+6

一個'Date'不** **有一種格式。如果你想以某種方式格式化,可以使用'DateFormat'對象。順便說一句,這也是*解析**將'String'解析爲'Date'對象的方法。 –

+0

[SimpleDateFormat](http://download.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)是您在Java中需要的。不確定關於Android。 – asgs

+0

如果不更改格式,則無法做到這一點。也許你只是簡單地打印一個'java.util.Date'對象,只會導致顯示'Date#toString()'? (它確實具有不同的固定格式)。然後,您應該先將「Date」轉換爲「String」,以便將其以所需的格式顯示給人類。 – BalusC

回答

1

見的SimpleDateFormat,http://developer.android.com/reference/java/text/SimpleDateFormat.html

該類將字符串轉換爲日期,並且反之亦然,使用給定的圖案。

使用正確的模式創建SimpleDateFormat後,可以使用它將字符串轉換爲Date,根據需要使用日期,並最終使用相同的SimpleDateFormat實例將Date轉換回String。

編輯:澄清時區

在它不是閹給定的字符串指定的問題是一個「純粹」的ISO 8601日期,而在這種情況下,你是否需要或不支持多個時區,如果那個時區將僅表示爲數字(如RFC 822中的+0200),帶冒號的數字(ISO 8601允許的+02:00)或名稱(EST等)。

如果字符串是純ISO 8601字符串,那麼SimpleDateFormat在解碼時區時會遇到一些問題。但是,如果它是「始終Z」(意味着時區數據沒有意義,並且您可以放心地忽略它),或者使用不帶冒號的數字(如+0200等)或使用時區名稱,則SimpleDateFormat可以正確處理它。

+0

SimpleDateFormat不支持基於ISO 8601的格式。 – jarnbjo

+0

@jarnbjo,SimpleDateFormat支持**任何**可訪問的日期格式:) – umbr

+0

umbr:不可以。SimpleDateFormat支持根據RFC822而不是ISO8601的時區組件。 – jarnbjo

3

這個下面簡單的代碼:

private Date parseDate(String date) { 
    SimpleDateFormat curFormater = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.S'Z'"); 
    Date dateObj = new Date(); 
    try { 
     dateObj = curFormater.parse(date); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    return dateObj; 
    } 
+0

它產生如下結果:Wed Jun 21 15:57:24 GMT + 00:00 2006但是我需要2006-06-21T15:57:24.000Z – user878588

+0

它也產生相同的輸出Mon Oct 07 04:50:00 PDT 1996 – user878588

0

ISO 8601

輸入字符串中恰好是標準ISO 8601格式。最後的ZZulu的縮寫,意思是UTC

java.time

的java.time類解析和生成表示日期時間值字符串時使用ISO 8601種格式默認。

Instant類代表UTC中的時間軸上的一個時刻,分辨率爲nanoseconds(最多九(9)位小數)。

Instant instant = Instant.parse("2006-06-21T15:57:24.000Z"); 

要生成標準的ISO 8601格式的字符串,調用toString

String output = instant.toString(); 

2006-06-21T15:57:24Z

字符串=日期 - 時間

不要混爲一談日期時間對象與代表值的String。 date-time對象可以解析一個String,並且可以生成一個String,但不是String。換句話說,一個字符串可以被輸入和/或輸出,但不是日期 - 時間對象本身。

因此,您的問題,「如何將此字符串轉換爲Date對象而不更改此格式」是沒有意義的。

要以ISO 8601以外的格式生成字符串,請將Instant轉換爲OffsetDateTimeZonedDateTime對象,並使用DateTimeFormatter類。搜索堆棧溢出DateTimeFormatter查看更多討論和許多示例。

轉換

應該避免老java.util.Date類只要有可能。但是,如果您必須與尚未更新爲java.time類型的舊代碼交互,則可以通過添加到舊日期時間類的新方法將其轉換爲java.time。

java.util.Date utilDate = java.util.Date.from(instant); 

...並會向另一個方向......

Instant instant = utilDate.toInstant(); 
相關問題