在Java中将iso8601字符串日期时间格式转换为日期
全部, 我知道我曾经问过一个类似的问题,关于使用Java将ISO8601日期字符串解析为日期,但这是使用SimpleDataFormat类的一个更具体的问题 我读过这篇文章 一位客户向我提供了一个XML文件,该文件的日期和时间格式如下: 2012-08-24T12:15:00+02:00 根据维基的文章,这是有效的,这是公平的 给定以下解析此字符串的代码,将引发ParseException,其中包含消息“UnparseableDate:”2012-08-24T12:15:00+02:00“ 问题在于时区说明符中的冒号+时区中的02:00导致引发异常+0200行 问题是,是否可以使用SimpleDataFormat解析这种类型的字符串 谢谢在Java中将iso8601字符串日期时间格式转换为日期,java,date,format,Java,Date,Format,全部, 我知道我曾经问过一个类似的问题,关于使用Java将ISO8601日期字符串解析为日期,但这是使用SimpleDataFormat类的一个更具体的问题 我读过这篇文章 一位客户向我提供了一个XML文件,该文件的日期和时间格式如下: 2012-08-24T12:15:00+02:00 根据维基的文章,这是有效的,这是公平的 给定以下解析此字符串的代码,将引发ParseException,其中包含消息“UnparseableDate:”2012-08-24T12:15:00+02:00“ 问题
Andez不,使用SimpleDataFormat,无法解析此日期(至少在jdk 6或更低版本中不可能)。我们必须自己为此编写自己的适配器
注意,由于此格式是XML模式的有效部分,因此可以使用该方法解析此日期。我找到的最佳答案是关于此问题 引述:
更简单的解决方案可能是在JAXB中使用数据类型转换器,因为JAXB必须能够根据XML模式规范解析ISO8601日期字符串。javax.xml.bind.DatatypeConverter.parseDateTime(“2010-01-01T12:00:00Z”)将为您提供一个日历对象,如果您需要一个日期对象,只需在其上使用getTime()。您可能会发现这很有用:。它也值得检查+1感谢您指出了这个类。+1比使用SimpleDataFormat更好这是在我试图解析“2015-10-19T18:58:23.000+0000”@KimballRobinson时为我抛出了一个非法的argumentException-可能是因为它不适合xsd dateTime格式(您在时区偏移中缺少“:”。@jtahlborn,我从Salesforce REST api获取时间戳,因此我无法控制格式。我现在正在使用Joda Time的库解析时间戳。
String inputDate = "2012-08-24T12:15:00+02:00";
String format = "yyyy-MM-dd'T'HH:mm:ssz";
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = sdf.parse(inputDate);