【问题标题】:unparseable date with timezone时区无法解析的日期
【发布时间】:2016-02-01 13:58:56
【问题描述】:

我必须解析这两个日期

private static final String d1 = "2013­-04­-02T08:37:56Z";
private static final String d2 = "2013-­04-­02T10:37:56+02:00";

对于第一个我使用的模式

"yyyy-MM-dd'T'HH:mm:ss'Z'"

我正在使用的第二个

"yyyy-MM-dd'T'HH:mm:ssXXX"

但我总是得到

java.text.ParseException: Unparseable date: ....

这里是我的测试代码:

private static final String d1 = "2013-­04­-02T08:37:56Z";
private static final String d2 = "2013-­04­-02T10:37:56+02:00";

private static final String DATE_FORMAT_WITH_TIMEZONE = "yyyy-MM-dd'T'HH:mm:ss'Z'";
private static final String DATE_FORMAT_WITH_TIMEZONE2 = "yyyy-MM-dd'T'HH:mm:ssXXX";

public static void main(String[] args) {
    try {
        SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT_WITH_TIMEZONE);

        Date d = df.parse(d1);
        System.out.println("d1 = " + d);

        df = new SimpleDateFormat(DATE_FORMAT_WITH_TIMEZONE2);
        df.setTimeZone(TimeZone.getTimeZone("Europe/Rome"));
        Date dt = df.parse(d2);
        System.out.println("d2 = " + dt);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
}

我的代码有什么问题?

【问题讨论】:

  • 删除格式中的“-”字符
  • 我不知道为什么,减号被删除了复制代码......但我有它们......我编辑并更正了它

标签: java date timezone simpledateformat parseexception


【解决方案1】:

您的 DateFormat 定义错误:

private static final String DATE_FORMAT_WITH_TIMEZONE = "yyyyMMdd'T'HH:mm:ss'Z'";
private static final String DATE_FORMAT_WITH_TIMEZONE2 = "yyyyMMdd'T'HH:mm:ssXXX";

字符串中没有减号

更新: 更新问题后,我认为 - 符号不是减号。只是看起来如此。更换此标志。然后再试一次。

【讨论】:

  • 嗨 jens,我不知道为什么复制代码时删除了减号...但我有它们...我编辑并更正了它
  • 嗨 Jens……那是……也许从源代码复制并过去到我的代码使用了一个类似于减号但​​不是减号的字符。非常感谢
  • 您的HYPHEN-MINUS 字符可能已替换为HYPHENen dash or em dash characters。确保在您的编程中仅使用文本编辑器,切勿使用文字处理器或格式化的电子邮件/消息。
【解决方案2】:

如下更改您的Formatter

private static final String DATE_FORMAT_WITH_TIMEZONE = "yyyyMMdd'T'HH:mm:ss'Z'";
private static final String DATE_FORMAT_WITH_TIMEZONE2 = "yyyyMMdd'T'HH:mm:ssXXX";

但是,我建议为此使用JodaTime。 JodaTime 有更好的功能。使用 JodaTime,您可以执行以下操作:

DateTimeFormatter df = DateTimeFormat.forPattern("yyyyMMdd'T'HH:mm:ss'Z'");
DateTime dateTime = df.parseDateTime("2013­-04­-02T08:37:56Z");
Date date = dateTime.toDate();

【讨论】:

    【解决方案3】:

    将您的示例转换为十六进制后,您似乎没有使用普通连字符 (0x2D),而是使用了一个类似的字符(根据我的 notepad++ 转换器,0xC2AD)称为“软连字符”。

    【讨论】:

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