可能的重复:
将符合 ISO8601 的字符串转换为 java.util.Date
我正在尝试转换这个字符串:
2011-06-07T14:08:59.697-07:00
对于 Java Date,到目前为止,我做了以下事情:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S");
Date date1 = sdf.parse("2011-06-07T14:08:59.697", new java.text.ParsePosition(0));
几乎一切都很好,除了最重要的部分,timezone!!
问题在于简单日期格式是它期望时区在+/-hhmm
我的在+/-hh:mm
format.
另外,我不知道为什么,这有效:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S Z");
Date date1 = sdf.parse("2011-06-07T14:08:59.697 -0700", new java.text.ParsePosition(0));
但这不是(时区之前的空格):
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SZ");
Date date1 = sdf.parse("2011-06-07T14:08:59.697-0700", new java.text.ParsePosition(0));
转换此日期的正确格式是什么2011-06-07T14:08:59.697-07:00
去java约会?
感谢您的帮助!
这看起来像 XML 中使用的 ISO 8601 标准日期和时间格式。不幸的是,Java 的SimpleDateFormat
不正确支持该格式,因为它无法处理时区中的冒号。
但是,那javax.xml
包中包含可以处理这种格式的类。
String text = "2011-06-07T14:08:59.697-07:00";
XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(text);
如果您需要它作为java.util.Calendar
然后你可以打电话toGregorianCalendar()
on it:
Calendar c2 = cal.toGregorianCalendar();
当然你可以获得java.util.Date
其中:
Date date = c2.getTime();
您还可以使用流行的乔达时间原生支持这种格式的库(并且具有比 Java 标准库更好的 API 来处理日期和时间)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)