【问题标题】:Unable to parse date with time zone无法解析带时区的日期
【发布时间】:2014-09-16 06:15:58
【问题描述】:

为了观察,我只是添加了我的代码片段。它适用于具有时区偏移的格式日期,但无法解析格式化的内容。

    SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss.SZ");
    Date javaDate = new Date();
    String stringDate = format.format(javaDate);
    System.out.println("Date: " + stringDate);

    try {
        javaDate = format.parse(stringDate); //reverse of format
    } catch (ParseException e) {
        e.printStackTrace();
    } 

有什么直接的方法吗?考虑20140916130644.236+0600 是您的日期字符串,您应该使用时区解析它您的日期格式是什么?您可以轻松解析 yyyyMMddHHmmss.S 模式,而 . 不是事实,主要事实是 Z 而解析不是格式化。

【问题讨论】:

  • 显示原始日期格式如 2014-14-02 02:14:15
  • 使用'.'而不是. 中的"yyyyMMddHHmmss.SZ"

标签: java android date datetime jakarta-ee


【解决方案1】:

因为.无效,把它去掉,这样试试

SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSZ");

或者如果你想要'.'然后像这样使用

SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss'.'SZ");

【讨论】:

    【解决方案2】:

    改变

    SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss.SZ");
    

    SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss'.'SZ");
    

    日期和时间格式由日期和时间模式字符串指定。 在日期和时间模式字符串中,从“A”到“Z”的未引用字母 并且从 'a' 到 'z' 被解释为模式字母代表 日期或时间字符串的组成部分。文本可以使用 引用 单引号 (') 以避免解释。

    【讨论】:

      【解决方案3】:

      'T''Z' 在这里被视为常量。您需要传递不带引号的 Z 。此外,您需要在输入字符串中指定时区。

      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
      

      【讨论】:

        【解决方案4】:

        直接的方法是日期解析格式应该类似于yyyyMMddHHmmss.SSSZ,格式化格式和解析格式可能不同。格式化格式 (yyyyMMddHHmmss.SZ) 不应用于解析。解析格式(yyyyMMddHHmmss.SSSZ)可用于格式化。为了避免意外结果/异常,最好使用yyyyMMddHHmmss.SSSZ 格式进行格式化/解析,而不是yyyyMMddHHmmss.SZ

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-12
          • 1970-01-01
          • 2011-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-02
          相关资源
          最近更新 更多