这是什么日期格式? 2011-08-12T20:17:46.384Z

新手上路,请多包涵

我有以下日期: 2011-08-12T20:17:46.384Z 。这是什么格式?我正在尝试通过 DateFormat.getDateInstance().parse(dateStr) 用 Java 1.4 解析它,我得到了

java.text.ParseException:无法解析的日期:“2011-08-12T20:17:46.384Z”

我想我应该使用 SimpleDateFormat 进行解析,但我必须先知道格式字符串。到目前为止,我所拥有的只是 yyyy-MM-dd ,因为我不知道 T 在此字符串中的含义 - 与时区相关的东西?此日期字符串来自 文件 CMIS 下载历史记录媒体类型 上显示的 lcmis:downloadedOn 标签。

原文由 Sarah Vessels 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 480
2 个回答

T 只是将日期与时间分开的文字,Z 表示“零时差”,也称为“祖鲁时间”(UTC)。如果你的字符串 总是 有一个“Z”,你可以使用:

 SimpleDateFormat format = new SimpleDateFormat(
    "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));

或者使用 Joda Time ,您可以使用 ISODateTimeFormat.dateTime()

原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 4.0 许可协议

tl;博士

输入字符串使用标准 ISO 8601 格式。

 Instant.parse ( "2011-08-12T20:17:46.384Z" )

国际标准化组织 8601

此格式由实用标准 ISO 8601 定义。

T 将日期部分与时间部分分开。最后的 Z 表示 UTC (即零时分秒的 UTC 偏移量)。 Z 发音为“Zulu”

java.time

与最早版本的 Java 捆绑在一起的旧日期时间类已被证明设计不佳、令人困惑和麻烦。避开他们。

相反,请使用 Java 8 及更高版本中内置的 java.time 框架。 java.time 类取代了旧的日期时间类和非常成功的 Joda-Time 库。

java.time 类在解析/生成日期时间值的文本表示时默认使用 ISO 8601

Instant 类表示 UTC 时间轴上的一个时刻,分辨率为 纳秒。该类可以直接解析您的输入字符串,而无需定义格式模式。

 Instant instant = Instant.parse ( "2011-08-12T20:17:46.384Z" ) ;


Java 中的日期时间类型表,包括现代的和传统的


关于 java.time

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

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

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

您可以直接与数据库交换 java.time 对象。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。不需要字符串,不需要 java.sql.* 类。 Hibernate 5 & JPA 2.2 支持 java.time

在哪里获取 java.time 类?

哪个 java.time 库与哪个版本的 Java 或 Android 一起使用的表格

原文由 Basil Bourque 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题