我正在尝试解析一个看起来像这样的日期:
2010-04-05T17:16:00Z
这是每个http://www.ietf.org/rfc/rfc3339.txt的有效日期。'Z‘字面(引号)“表示UTC是指定时间的首选参考点。”
如果我尝试使用SimpleDateFormat和以下模式对其进行解析:
yyyy-MM-dd'T'HH:mm:ss
它将被解析为Mon Apr 05 17:16:00EDT 2010
SimpleDateFormat
无法解析具有以下模式的字符串:
yyyy-MM-dd'T'HH:mm:ssz
yyyy-MM-dd'T'HH:mm:ssZ
我可以显式地设置要在SimpleDateFormat
上使用的TimeZone,以获得预期的输出,但我不认为这是必要的。我是不是漏掉了什么?有没有替代的日期解析器?
发布于 2010-04-06 04:47:37
在该模式中,包含'z‘日期-时间组件表示时区格式需要符合General time zone“标准”,例如Pacific Standard Time; PST; GMT-08:00
。
'Z‘表示时区符合RFC 822 time zone标准,例如-0800
。
我想你需要一个DatatypeConverter ..。
@Test
public void testTimezoneIsGreenwichMeanTime() throws ParseException {
final Calendar calendar = javax.xml.bind.DatatypeConverter.parseDateTime("2010-04-05T17:16:00Z");
TestCase.assertEquals("gotten timezone", "GMT+00:00", calendar.getTimeZone().getID());
}
发布于 2013-03-06 02:40:24
Java不能正确解析ISO日期。
与麦肯齐的答案类似。
只需在解析之前修复Z
即可。
代码
String string = "2013-03-05T18:05:05.000Z";
String defaultTimezone = TimeZone.getDefault().getID();
Date date = (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")).parse(string.replaceAll("Z$", "+0000"));
System.out.println("string: " + string);
System.out.println("defaultTimezone: " + defaultTimezone);
System.out.println("date: " + (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")).format(date));
结果
string: 2013-03-05T18:05:05.000Z
defaultTimezone: America/New_York
date: 2013-03-05T13:05:05.000-0500
发布于 2014-06-25 02:46:52
您正在分析的日期为ISO 8601格式。
在Java7中,读取和应用时区后缀的模式应该是yyyy-MM-dd'T'HH:mm:ssX
https://stackoverflow.com/questions/2580925
复制相似问题