【问题标题】:What is wrong with this Java date format?这种 Java 日期格式有什么问题?
【发布时间】:2013-08-07 08:23:45
【问题描述】:

电子邮件消息解析器包含以下数据格式定义:

private final static DateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");


if (line.startsWith("Date:")) {
        try {
            email.date = dateFormat.parse(line.substring(6));
        } catch (ParseException e) {
                System.err.println("Unparsable: " + line.substring(6));
        }

此代码打印错误:

Unparsable: Mon, 15 Jan 2001 23:18:00 -0800 (PST)

为什么格式不匹配?

EEE, d MMM yyyy HH:mm:ss Z

【问题讨论】:

  • 结尾没有“(PST)”是否有效?
  • 这似乎工作new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z").parse("Mon, 15 Jan 2001 23:18:00 -0800 (PST)")
  • 如果不是@JonSkeet 指出的Locale 问题,也可能是线程问题(SimpleDateFormat 不是线程安全的),但这似乎不太可能。

标签: java parsing date format


【解决方案1】:

它对我有用 - 但我从英语语言环境开始。这可能是问题所在 - 尝试在构造 SimpleDateFormat 时明确指定语言环境:

private final static DateFormat dateFormat =
    new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.US);

否则将使用您当前的系统区域设置,如果不是英语,它将尝试解析不同的月份和日期名称。

【讨论】:

    【解决方案2】:
        DateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
        Date date=dateFormat.parse("Mon, 15 Jan 2001 23:18:00 -0800 (PST)");
        System.out.println(dateFormat.format(date));
    

    我试过了,它打印出来了

       Tue, 16 Jan 2001 13:18:00 +0600
    

    我没有收到任何错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2019-11-19
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      相关资源
      最近更新 更多