使用 Java 1.6 接收带有包含 ISO 8601 格式化日期的字符串的 ParseException
Posted
技术标签:
【中文标题】使用 Java 1.6 接收带有包含 ISO 8601 格式化日期的字符串的 ParseException【英文标题】:Receiving ParseException with String containing ISO 8601 Formatted Date using Java 1.6 【发布时间】:2014-08-28 00:20:41 【问题描述】:当我尝试将 ISO 8601 格式的字符串解析为 Java 日期类型时,不断收到 ParseException。
String myDateString = "2014-07-04T22:59:36Z";
TimeZone timeZone = TimeZone.getTimeZone("UTC");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'", Locale.US);
dateFormat.setTimeZone(timeZone);
Date formattedDate = dateFormat.parse(myDateString);
不断返回 ParseException:
Unparseable date: "2014-07-04T22:59:36Z"
我可能做错了什么?
【问题讨论】:
您应该使用X
(未引用)而不是'Z'
。你需要 :ss
几秒钟 -- "yyyy-MM-dd'T'HH:mm:ssX"
。
Trouble parsing a certain Date format, I keep getting ParseException 的可能重复项
【参考方案1】:
您的日期格式中缺少秒数:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
【讨论】:
【参考方案2】:tl;博士
对于 Java 6 和 7,将 ThreeTen-Backport 库添加到您的项目中。对于 Java 8 及更高版本,java.time 是内置的。
Instant.parse( "2014-07-04T22:59:36Z" )
java.time
现代方法是使用 java.time 类来取代麻烦的旧旧日期时间类,例如 SimpleDateFormat
、Date
和 Calendar
。
虽然内置于 Java 8 及更高版本,但可以向后移植到 Java 6 和 Java 7。 (见下文)
Instant
Instant
类表示UTC 中时间轴上的时刻,分辨率为nanoseconds(最多九 (9) 位小数)。
java.time 类默认使用 ISO 8601 格式。所以无需指定格式模式。 Instant
类可以直接解析你的输入字符串。
Instant instant = Instant.parse( "2014-07-04T22:59:36Z" );
要生成标准 ISO 8601 格式的字符串,只需调用 toString
。
String output = instant.toString();
2014-07-04T22:59:36Z
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date
、Calendar
和 SimpleDateFormat
。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?
Java SE 8 和 SE 9 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6 和 SE 7 ThreeTen-Backport 中的大部分 java.time 功能都向后移植到 Java 6 和 7。 Android ThreeTenABP 项目专门为 android 适配 ThreeTen-Backport(如上所述)。 见How to use ThreeTenABP…。ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval
、YearWeek
、YearQuarter
和more。
【讨论】:
以上是关于使用 Java 1.6 接收带有包含 ISO 8601 格式化日期的字符串的 ParseException的主要内容,如果未能解决你的问题,请参考以下文章
带有 SOAP XML JAX-WS(WAS Portal 7)服务的 Java 1.6 Maven 项目对 Tomcat Liferay 6.2 GA6 无法访问端点