【问题标题】:Receiving ParseException with String containing ISO 8601 Formatted Date using Java 1.6使用 Java 1.6 接收带有包含 ISO 8601 格式化日期的字符串的 ParseException
【发布时间】:2023-03-23 16:21:01
【问题描述】:

当我尝试将 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"

我可能做错了什么?

【问题讨论】:

标签: java date iso


【解决方案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 类来取代麻烦的旧旧日期时间类,例如 SimpleDateFormatDateCalendar

    虽然内置于 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.DateCalendarSimpleDateFormat

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

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

    从哪里获得 java.time 类?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2016-01-06
      相关资源
      最近更新 更多