Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将iso8601字符串日期时间格式转换为日期_Java_Date_Format - Fatal编程技术网

在Java中将iso8601字符串日期时间格式转换为日期

在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“ 问题

全部,

我知道我曾经问过一个类似的问题,关于使用Java将ISO8601日期字符串解析为日期,但这是使用SimpleDataFormat类的一个更具体的问题

我读过这篇文章

一位客户向我提供了一个XML文件,该文件的日期和时间格式如下:

2012-08-24T12:15:00+02:00

根据维基的文章,这是有效的,这是公平的

给定以下解析此字符串的代码,将引发ParseException,其中包含消息“UnparseableDate:”2012-08-24T12:15:00+02:00“

问题在于时区说明符中的冒号+时区中的02:00导致引发异常+0200行

问题是,是否可以使用SimpleDataFormat解析这种类型的字符串

谢谢


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);