English 中文(简体)
如何将 ISO 8601 日期(字符串)转换为日期?
原标题:
  • 时间:2008-12-19 10:46:08
  •  标签:

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

这该怎么做?

问题回答

使用java.text.DateFormat——或者更可能地,SimpleDateFormat

或者选择Joda Time,它拥有更好的API。请小心使用Java内置API-DateFormat不是线程安全的(而Joda Time几乎在所有地方都使用不可变类型,因此是线程安全的)。

一个(没有经过测试-应该除了可能的时区部分外没问题)Joda Time API的示例:

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

tl;dr

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

Using java.time

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

ISO 8601

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

结尾的Z代表Zulu,意味着协调世界时。

Instant类表示时间线上的一个时刻,以协调世界时(UTC)为基准,分辨率为纳秒(最多九位数字的小数部分)。

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

About java.time

Java.time 框架已内置在 Java 8 及以后版本。这些类取代了旧的令人头痛的遗留日期时间类,如java.util.DateCalendarSimpleDateFormat

该项目现处于维护模式,建议迁移到java.time类。

要了解更多,请参阅Oracle教程,并搜索Stack Overflow获取许多示例和解释。规范是JSR 310

您可以直接将java.time对象与数据库互换。使用符合JDBC 4.2或更高版本的JDBC驱动程序。无需字符串,无需java.sql.*类。

在哪里获取java.time类?

三十-额外项目将java.time与其他类扩展。这个项目是可能加入java.time的未来可能性的试验场。您可能会在这里找到一些有用的类,例如“Interval”,“YearWeek”,“YearQuarter”和“more”。

DateTime dateToGetFromString;

dateToGetFromString = DateTime.Parse(stringContainingDate);

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





相关问题
热门标签