如何将ISO8601日期(字符串)转换为日期?

时间:2008-12-19 10:46:09

标签: java date parsing iso8601

我正在解析XML文件。在此文件中有一个包含日期字符串"2008-11-10T05:51:33Z"的标记,我想将此字符串转换为java.util.Date object.

如何做到这一点?

3 个答案:

答案 0 :(得分:9)

使用java.text.DateFormat - 或更有可能使用SimpleDateFormat

或者,使用其无限更好的API转到Joda Time。小心Java内置API - DateFormats不是线程安全的。 (它们在Joda Time中,几乎在任何地方都使用不可变类型。)

一个(未经测试 - 除了可能时区位之外应该没问题)Joda Time API的例子:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyyMMdd'T'HH:mm:ssZ");
DateTime dt = fmt.parse("2008-11-10T05:51:33Z");

答案 1 :(得分:1)

TL;博士

Instant.parse( "2008-11-10T05:51:33Z" ) 

使用java.time

现代方法使用java.time类。避免麻烦的旧日期时间类,例如DateCalendar,因为它们现在已被java.time类取代。

ISO 8601

您的输入字符串符合ISO 8601标准,用于格式化表示日期时间值的字符串。在解析/生成字符串时,java.time类默认使用标准格式,因此无需指定格式化模式。

最后ZZulu的缩写,表示UTC。

Instant类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。

Instant instant = Instant.parse( "2008-11-10T05:51:33Z" ) ;

java.util.Date

最好避开旧的遗留类java.util.Date。但是,如果必须,您可以通过调用添加到旧类的新方法来转换为/从java.time转换。我们在这里使用Date.from

java.util.Date d = java.util.Date.from( instant ) ;

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 2 :(得分:0)

DateTime dateToGetFromString;

dateToGetFromString = DateTime.Parse(stringContainingDate);

您还可以使用DateTime类的TryParse函数,查看文档。