无法将日期字符串解析为日期。

8

我想将一个日期字符串解析为日期。我查看了一些其他的问题,但是没有找到答案。

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:无法解析的日期:"[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();
}

我找到了问题所在,原来是我疏忽了。数据库中的字符串是[31.10.2013 17:57:58 CET]而不是31.10.2013 17:57:58 CET

谢谢。


使用破折号代替点符号,格式为dd.MM.yyyy。 - Saqib
问题似乎出在最后一部分...当它被删除时,它就可以正常工作。也许"CET"在德语中是不同的? - tobias_k
对我来说很好用...对我来说产生了这个输出..2013年10月31日星期四IST 22:27:58 - Saurabh Sharma
可能是重复的问题 http://stackoverflow.com/questions/17831696/inconsistent-date-time-format-for-german-locale - Sitansu
1
时区的三个字母代码既不标准化也不唯一。现在我从下面的答案中了解到它们可以本地化。使用这种字符串格式会带来麻烦。如果您可以以明确的ISO 8601格式2014-01-11T12:21:05+08:00获取数据,那么您将更好。 - Basil Bourque
2个回答

9

在德语中,“Central European Time” 是“Mitteleuropäische Zeit”,因此,如果你想使用Locale.GERMAN,将CET更改为MEZ即可。

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

要获取指定区域设置下所有合法的时区字符串列表,请使用以下代码:

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

谢谢你的回答。我没有想到这一点,因为在德语维基百科上,你也要用 CET 签署你的输入。 - user3190987

0

试试这个:

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();
        }
    }

输出:2013年10月31日星期四22:27:58 IST


你是对的。H指定(0-23)格式,其中h指定(1-12)。我同时运行了两种格式的程序并粘贴了较小的一个。我已经更改了发布的答案。谢谢。 - JDGuide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接