【问题标题】:Unable to parse date String to Date无法将日期字符串解析为日期
【发布时间】:2014-01-13 16:40:36
【问题描述】:

我想将日期字符串解析为日期。我正在寻找其他一些问题,但没有找到答案。

String mail_delivered = "31.10.2013 17:57:58 CET";

try {
    DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss z", Locale.GERMAN);
    Date result =  df.parse(mail_delivered);  
    System.out.println(result);
} catch (ParseException pe) {
    pe.printStackTrace();
}

错误信息是 java.text.ParseException: Unparseable date: "[31.10.2013 17:57:58 CET]" 我不知道怎么回事。

请你帮帮我。 提前致谢。


编辑:好的。我把它改成英文,但我仍然有同样的问题。我不想更改输入,因为它来自邮件数据库。还有其他想法吗?

String mail_delivered = "31.10.2013 17:57:58 CET";

try {
    DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss z", Locale.ENGLISH);
    Date result =  df.parse(mail_delivered);  
    System.out.println(result);
} catch (ParseException pe) {
    pe.printStackTrace();
}

我发现了问题。我是瞎子。数据库中的 Sting 是 [31.10.2013 17:57:58 CET],而不是 31.10.2013 17:57:58 CET

谢谢。

【问题讨论】:

  • 使用 - 而不是 .在 dd.MM.yyyy
  • 问题似乎出在最后一部分......当它被删除时,它可以工作。也许“CET”在德语中有所不同?
  • 对我来说很好..为我提供了这个 o/p.. Thu Oct 31 22:27:58 IST 2013
  • 这些时区的三个字母代码既不标准化也不唯一。现在我从下面的答案中了解到它们可以本地化。使用这种字符串格式是自找麻烦。如果您能以明确的ISO 8601 格式2014-01-11T12:21:05+08:00 传递您的数据,那么您会做得更好。

标签: java date time


【解决方案1】:

在德语中,“中欧时间”是“Mitteleuropäische Zeit”,因此如果您想使用Locale.GERMAN,请将CET 更改为MEZ 即可。

String mail_delivered = "31.10.2013 17:57:58 MEZ";

对于给定语言环境的所有合法时区字符串的列表,使用这个:

DateFormatSymbols.getInstance(Locale.GERMAN).getZoneStrings()

【讨论】:

  • 感谢您的回答。我没有想到这一点,因为在德语维基百科中,您也使用 CET 签署您的输入。
【解决方案2】:

试试这个:

public static void main(String[] args)throws Exception {
        // TODO Auto-generated method stub
       //Middle European Time (MET or MEZ-German)
        String mail_delivered = "31.10.2013 17:57:58 MET";
        try {
            SimpleDateFormat df= new SimpleDateFormat("dd.MM.yyyy HH:mm:ss z",Locale.GERMAN);
            Date result =  df.parse(mail_delivered);  
            System.out.println(result);
        } catch (ParseException pe) {
            pe.printStackTrace();
        }
    }

输出:- Thu Oct 31 22:27:58 IST 2013

【讨论】:

  • 你是对的。H 指定 (0-23) 格式,其中 h 指定 (1-12)。我正在运行两个格式程序并粘贴小程序。我已经更改了发布的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多