我有一個String,2013-10-07T23:59:51.205-07:00
,希望將其轉換爲Java日期對象。我正在解析錯誤。在java中將字符串轉換爲日期 - 時區
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse("2013-10-07T23:59:51.205-07:00");
我有一個String,2013-10-07T23:59:51.205-07:00
,希望將其轉換爲Java日期對象。我正在解析錯誤。在java中將字符串轉換爲日期 - 時區
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse("2013-10-07T23:59:51.205-07:00");
嘗試
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
.parse("2013-10-07T23:59:51.205-0700");
的Z不是字面和時區不具有結腸
參見實施例在http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
如果正在使用java7然後Z
可以被替換爲X
並且時區可以有冒號
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");
你的模式是錯的,你應該使用下列內容:「.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
不需要多個X的 –
正如文檔所說'ISO 8601時區:模式字母的數量指定格式的格式和解析」。鏈接:[SimpleDateFormat](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) – Cirou
您應該使用XXX
的格式-07:00
,而不是Z
和X
。
Date sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
.parse("2013-10-07T23:59:51.205-07:00");
看看docs的例子。
使用這個技巧來解析ISO8601日期時間格式。我承認還沒有在字符串值中用毫秒部分嘗試過這可能會給你一個額外的頭痛。這適用於Java6。
import javax.xml.bind.DatatypeConverter;
Calendar cal = DatatypeConverter.parseDateTime(strDatetime);
如果我記得正確的cal實例可能不使用系統默認的時區。它初始化爲原始字符串值時區。如果您希望實例使用系統時區,則可以執行此轉換。
long ts = cal.getTimeInMillis();
cal = Calendar.getInstance();
cal.setTimeInMillis(ts);
X來自java7 –
@ user2310289是的。在此之前'Z'會起作用。 –
是-7000是否正確? –