Converting a String to Date, almost done!
Possible Duplicate:
Converting ISO8601-compliant String to java.util.Date
我正在尝试转换此字符串:
1 | 2011-06-07T14:08:59.697-07:00 |
到Java日期,到目前为止,这是我做的:
1 2 | 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)); |
几乎一切都很好,除了最重要的部分,时区!!
SimpleDateFormat的问题是它期望
另外,我不知道为什么,这有效:
1 2 | 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)); |
但这不是(时区之前的空间):
1 2 | 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)); |
将此日期
谢谢你的帮助!
这看起来像在ISO中使用的ISO 8601标准日期和时间格式。不幸的是,Java的
但是,
1 2 | String text ="2011-06-07T14:08:59.697-07:00"; XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(text); |
如果您需要它作为
1 |
当然,你可以得到一个
1 |
您还可以使用流行的Joda Time库,它本身支持这种格式(并且具有比Java标准库更好的处理日期和时间的API)。
Java SimpleDateFormat在时区信息中不支持冒号。您应该使用其他实现,例如JodaTime。
用法示例:
1 2 3 4 5 |
如果需要maven pom.xml依赖:
1 2 3 4 5 | <dependency> <groupId>joda-time</groupId> joda-time</artifactId> <version>1.6.2</version> </dependency> |
希望能帮助到你。
1 2 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); System.out.println(sdf.parse("2011-06-07T14:08:59.697-0700")); |
版画
1 | Tue Jun 07 22:08:59 BST 2011 |
您似乎需要删除时区中的
看起来DateFormat无法找到毫秒的结束和时区的开始。正规救援!
这是一个解决方法:
1 2 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S Z"); Date date1 = sdf.parse("2011-06-07T14:08:59.697-0700".replaceAll("(?=.{5}$)","")); |
正则表达式放入一个空格,这段代码执行没有错误。