2013-10-23 59 views

回答

4

Z不應放在引號內。我不認爲Z會適用於您給定的時區。在Java 7之前,我想沒有任何格式可以用中間的冒號來解析ISO 8601格式的時區。您應該改用-0700

但是,從Java 7開始,您可以使用X而不是Z解析ISO 8601 format timezone。請參閱javadoc的SimpleDateFormat。只需使用以下格式:

// This would work from Java 7 onwards 
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX")  
        .parse("2013-10-07T23:59:51.205-07:00"); 
+0

X來自java7 –

+0

@ user2310289是的。在此之前'Z'會起作用。 –

+0

是-7000是否正確? –

0

的問題是,-07:00不是有效的時區。時區應該有這個format,例如-0800

+0

除非你使用的java 7其中'-08:00'是一個有效的時區 – Cirou

3

你的模式是錯的,你應該使用下列內容:「.205-07:00'

date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX") 
         .parse("2013-10-07T23:59:51.205-07:00");      

的「X」表示在ISO 8601格式的時區爲您String在這裏表達

欲瞭解更多信息,請閱讀文檔:SimpleDateFormat

+0

不需要多個X的 –

+0

正如文檔所說'ISO 8601時區:模式字母的數量指定格式的格式和解析」。鏈接:[SimpleDateFormat](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) – Cirou

1

您應該使用XXX的格式-07:00,而不是ZX

Date sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX") 
      .parse("2013-10-07T23:59:51.205-07:00"); 

看看docs的例子。

3

使用這個技巧來解析ISO8601日期時間格式。我承認還沒有在字符串值中用毫秒部分嘗試過這可能會給你一個額外的頭痛。這適用於Java6。

import javax.xml.bind.DatatypeConverter; 
Calendar cal = DatatypeConverter.parseDateTime(strDatetime); 

如果我記得正確的cal實例可能不使用系統默認的時區。它初始化爲原始字符串值時區。如果您希望實例使用系統時區,則可以執行此轉換。

long ts = cal.getTimeInMillis(); 
    cal = Calendar.getInstance(); 
    cal.setTimeInMillis(ts);