我尝试将String转换为Date。
这是我的代码:
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
Date date = format.parse("Sun Apr 08 16:37:00 CEST 2012");
我得到例外:
04-08 13:51:36.536:W / System.err(8005):java.text.ParseException: 无法解释的日期:“Sun Apr 08 16:37:00 CEST 2012”。
格式似乎没问题。我错过了什么吗?
感谢。
答案 0 :(得分:7)
您发布的代码不是您的实际代码,或者您遇到了区域设置问题。它适用于带有美国语言环境的 Sun Oracle Java 1.6。
将您的代码更改为:
SimpleDateFormat format =
new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
答案 1 :(得分:5)
SimpleDateFormat具体为Locale。至少模式E
和M
是特定于语言环境的,因为例如“Sun”或“Sunday”与Locale.GERMAN或Locale.FRENCH等不匹配。您最好指定使用的Locale
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
或使用非特定于语言环境的格式。
答案 2 :(得分:2)
其他答案在2012年都是很好的答案。以下是如何处理现代(2014)Java日期和时间类的示例:
CJ(vars, vis, sorted = FALSE)[, paste(vars, vis, sep =".")]
代码示例的灵感来自一个重复的问题(我认为),How to convert Xml String date to int in java。使用该问题的示例字符串打印:
System.out.println("date de la requete est " + dateq);
DateTimeFormatter dtf = DateTimeFormatter
.ofPattern("EEE MMM dd HH:mm:ss xx uuuu", Locale.ROOT);
OffsetDateTime dateTime1 = OffsetDateTime.parse(dateq, dtf);
System.out.println("new date " + dateTime1);
问:我无法在Android上使用较新的课程(?)
答:是的,你可以。对于Android,请使用专为Android定制的后端,ThreeTenABP。否则,对于Java 6和7,请使用ThreeTen Backport。
问:您的代码不适用于此问题中的日期时间字符串!
答:(1)如果可以,请避免使用像CEST这样的三个和四个字母的时区缩写。许多都是模棱两可的,解释甚至可能因您的JVM当前时区设置而异。 CEST只是时区的夏半,而不是全时区。 (2)如果您无法获得没有date de la requete est Tue Feb 08 12:30:27 +0000 2011
new date 2011-02-08T12:30:27Z
或类似字符串的字符串,请尝试使用CEST
代替ZonedDateTime
,并使用格式模式中的OffsetDateTime
。这适用于示例并生成zzz
。
问:我如何使用较新的课程?
答:一个好的起点是Oracle Tutorial。
问:2012-04-08T16:37+02:00[Europe/Paris]
??
答:如果您的日期时间字符串来自世界上的特定地点以及该地点的语言,请使用相应的区域设置。如果只是英文版,因为世界各地的计算机系统都倾向于输出英文,我更喜欢使用Locale.ROOT
作为“区域性中性区域设置”,就像说“不要在这里做任何特定于区域设置的事情”。
答案 3 :(得分:-1)
看起来像#34; Sun"没有得到认可。 试试这个:
date = format.parse("Sunday Apr 08 16:37:00 CEST 2012");
适合我。