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

发布于 2024-07-11 08:53:28 字数 141 浏览 7 评论 0 原文

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

如何才能做到这一点?

I am parsing XML file. In this file there is one tag containing date string "2008-11-10T05:51:33Z" and I want convert this string in to java.util.Date object.

How can this be done?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

赠意 2024-07-18 08:53:28

使用 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");

Use java.text.DateFormat - or more likely, SimpleDateFormat.

Alternatively, go for Joda Time with its infinitely better API. Be careful with the Java built-in APIs - DateFormats aren't thread-safe. (They are in Joda Time, which uses immutable types almost everywhere.)

An (untested - should be fine except for possibly the timezone bit) example for the Joda Time API:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyyMMdd'T'HH:mm:ssZ");
DateTime dt = fmt.parse("2008-11-10T05:51:33Z");
相守太难 2024-07-18 08:53:28

tl;dr

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

使用 java.time

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

ISO 8601

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

末尾的 ZZulu 的缩写,表示 UTC。

即时类表示 UTC 中时间轴上的时刻,分辨率为 纳秒(最多九 (9) 位小数)。

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

java.util.Date

最好避免使用旧的遗留类java.util.Date。 但如果必须的话,您可以通过调用添加到旧类中的新方法来转换 java.time 或从 java.time 转换。 这里我们使用 <代码>日期.来自

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

关于 java.time

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

Joda-Time 项目,现已在 维护模式,建议迁移到 java.time 类。

要了解更多信息,请参阅 Oracle 教程 。 并在 Stack Overflow 上搜索许多示例和解释。 规范为 JSR 310

您可以直接与数据库交换java.time对象。 使用符合 JDBC 驱动程序 jeps/170" rel="noreferrer">JDBC 4.2 或更高版本。 不需要字符串,不需要 java.sql.* 类。

从哪里获取 java.time 类?

ThreeTen-Extra 项目通过附加类扩展了 java.time。 该项目是 java.time 未来可能添加的内容的试验场。 您可能会在这里找到一些有用的类,例如 Interval YearWeek YearQuarter ,以及更多

tl;dr

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

Using java.time

The modern approach uses the java.time classes. Avoid the troublesome older date-time classes such as Date and Calendar as they are now supplanted by java.time classes.

ISO 8601

Your input string complies with the ISO 8601 standard for formatting strings representing date-time values. The java.time classes use the standard formats by default when parsing/generating strings, so no need to specify a formatting pattern.

The Z on the end is short for Zulu and means UTC.

The Instant class represents a moment on the timeline in UTC with a resolution of nanoseconds (up to nine (9) digits of a decimal fraction).

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

java.util.Date

Best to avoid the old legacy class java.util.Date. But if you must, you can convert to/from java.time by calling new methods added to the old classes. Here we use Date.from.

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

About java.time

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.

To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.

You may exchange java.time objects directly with your database. Use a JDBC driver compliant with JDBC 4.2 or later. No need for strings, no need for java.sql.* classes.

Where to obtain the java.time classes?

The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.

最近可好 2024-07-18 08:53:28
DateTime dateToGetFromString;

dateToGetFromString = DateTime.Parse(stringContainingDate);

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

DateTime dateToGetFromString;

dateToGetFromString = DateTime.Parse(stringContainingDate);

You can also use the TryParse function of DateTime class, look in the documentation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文