代码之家  ›  专栏  ›  技术社区  ›  Tanu Garg

找不到此日期的格式:“2018-09-09T09:04:47+00:00”

  •  -4
  • Tanu Garg  · 技术社区  · 6 年前

    java.text.ParseException: Unparseable date: "2018-09-09T09:04:47+00:00"
    

    这是什么日期格式?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Rahim Dastar    6 年前

    您应该使用“X”表示时区:

    String pattern = "yyyy-MM-dd'T'HH:mm:ssX";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
    Date date = simpleDateFormat.parse("2018-09-09T09:04:47+00:00");
    System.out.println(date);
    
        2
  •  2
  •   Stephen C    6 年前

    似乎有一些混乱,关于这个日期格式,所以我会解释。

    1. 这是一个带有时区偏移的ISO8601日期时间值。

      参考文献:

      • ISO 8601 维基百科的页面是准确的,而且相当全面。
      • W3财团已在TR中记录; here .
      • 官方版本可从ISO获得; here
    2. 这个 Z +00.00 ,在一些圈子里(例如军队)被称为“祖鲁时代”。

    3. Z轴

    4. Z轴 . Java的数据时间解析器可以解析 Z轴

    5. 如果ISO日期时间是“不可解析的”,那就意味着您(显式或隐式地)使用了错误的格式来解析它。

    6. 幸运的是。。。ISO 8601是一个

    7. 有许多种ISO 8601日期和日期/时间表示法,如W3联盟所述 TR

    8. 如果您正在使用 java.text.SimpleDateFormat ,则此ISO 8601变体的正确模式为 "yyyy-MM-dd'T'HH:mm:ssX" java.time.format.DateTimeFormatter 也是 “yyyy-MM-dd'T'HH:MM:ssX”

    9. 这个 DateTimeFormatter 类还将许多标准格式定义为常量。此类ISO 8601日期/时间的格式为 DateTimeFormatter.ISO_OFFSET_DATE_TIME . 其他种类也有定义。

    10. 这个 Date Calendar 遗产 班级。建议使用新的 java.time

        3
  •  1
  •   drowny    6 年前

    使用此转换方法 String to date 哪个是 ISO format . 但通常ISO格式以 Z ,但如果不是没有问题。此方法返回Date,并根据此返回值执行任何操作。

    public static Date toCalendar( String isoDate)
                throws ParseException {
            String s = isoDate.replace("Z", "+00:00");
            try {
                s = s.substring(0, 22) + s.substring(23);  // to get rid of the ":"
            } catch (IndexOutOfBoundsException e) {
                throw new ParseException("Invalid length", 0);
            }
            return  new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(s);
    
        }
    

    Java8 TimeApi 或更高版本有此用法,请尝试;

    OffsetDateTime offsetDateTime = OffsetDateTime.parse( "2018-09-09T09:04:47+01:00" );
    Instant instant = offsetDateTime.toInstant();
    java.util.Date date = java.util.Date.from( instant );
    

    或者只用这个图案 yyyy-MM-dd'T'HH:mm:ssX