2013-06-12 39 views
1

我有一個時間戳字符串 2013-03-01T11:22:18.01Z生成strftime("%Y:%m:%dT%H:%M:%SZ"),這是在Python中。問題與SimpleDateFormat解析日期生成strftime

現在我試圖使用Java的SimpleDateFormat解析這個時間戳。很多的,我發現示例代碼的似乎要做到這一點:

String DATE_FORMAT = "YYYY-MM-DD'T'hh:mm:ss.ssZ" 
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT) 
sdf.setLenient(false) 
sdf.parse(timestamp) <---- throws ParseException here 

不過,我得到一個錯誤對話框,說 Unparseable date: "2013-03-01T11:22:18.01Z"

我已經調整DATE_FORMAT在這裏和那裏,嘗試各種東西,但我一直被困在相同的路障上一段時間了。看起來我需要借用這個stackoverflow社區的力量。

+0

閱讀javadoc Si​​mpleDateFormat [patterns](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)。 –

+0

這應該是'yyyy',不'YYYY'和'dd',不'DD'。還有'HH'而不是'hh'等 - 就像上面提到的那樣,去看看javadoc。 – fge

回答

1

比其他同DatatypeConverter.parseDateTime解析在yyyy VS YYYYddDD,該Z也造成一個問題。與像

yyyy-MM-dd'T'HH:mm:ss.ssZ 
| | | | | | | | | 
| | | | | | | | -----timezone (RFC 822 time zone, ex: -0800) 
| | | | | | | -------seconds again (maybe you wanted SS for milliseconds) 
| | | | | | ----------seconds (0-59) 
| | | | | -------------minutes (0-59) 
| | | | ----------------hours (0-23) 
| | | ------------------the character T 
| | ---------------------day in month 
| ------------------------month in year 
----------------------------year 

一個模式,但你通過了,"2013-03-01T11:22:18.01Z"字符串你SimpleDateFormat,只需要在年底Z,不是一個時區。

如果你實際上是在期待一個Z末,那麼你就需要引用它的格式字符串:

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

就像你一樣的T。從javadoc

可以使用單引號(')引用文本以避免解釋。

+0

的'點後ss'確實應該'SS'(爲微秒) – fge

+0

@fge它真的應該。 –

1

1)2013-03-01T11正確圖案:22:18.01是"yyyy-MM-dd'T'HH:mm:ss.SSS"(如果是0.01單位爲毫秒)

2)在2013-03-01T11ž時區:22:18.01Z不能被​​解析的SimpleDateFormat'Z'只接受-0800格式(RFC 822)。即使你將它更改爲「Z」(一般的時區),它仍然不會解析Z,它應該是GMT

看到SimmpleDateFormat API。

3)2013-03-01T11:22:18.01Z看起來非常XSD DATETIME格式http://www.schemacentral.com/sc/xsd/t-xsd_dateTime.html並可以從java.xml.bind包(Java標準庫)

+0

謝謝!我只是嘗試了你的建議,但它仍然給出了同樣的錯誤。 – Barney

+0

現在它的工作!謝謝一堆! – Barney