2013-06-12 43 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