2011-12-09 49 views
4

我有一个愚蠢的问题java.util.DateJava日期解析

我有这行代码,但我不明白为什么这个日期是用这种格式无法解析的。

public class TestTime { 
    public static void main(String[] args) { 
     final String DATE_FORMAT = "EEE MMM dd HH:mm:ss zzz yyyy"; 

     String date = "Sat Dec 31 10:00:00 CET 2011"; 
     SimpleDateFormat dFormat = new SimpleDateFormat(DATE_FORMAT); 

     Date lDate = null; 
     try { 
      lDate = dFormat.parse(date); 
     } catch (ParseException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
    } 
} 
+3

检查您的默认语言环境,是否en_US等等或某些'隐晦'? – home

+0

显示异常跟踪 – korifey

+1

请小心使用'SimpleDateFormat'。它不是线程安全的。 http://www.codefutures.com/weblog/andygrove/2007/10/simpledateformat-and-thread-safety.html – Gray

回答

10

如果您的系统使用的区域设置不是英语,你需要使用此构造:

SimpleDateFormat(DATE_FORMAT,Locale.ENGLISH); 

如果这不是问题,你应该格式化使用相同格式化程序的日期并将输出与输入字符串进行比较。

5

我看不出有什么问题。它执行对我来说没有错误,并返回:

Sat Dec 31 09:00:00 GMT 2011 
+0

不是一个真正的答案是不是? – soulcheck

+2

没有堆栈跟踪,这是一个有效的努力 - 至少,它表明没有什么东西与代码“完全不正确”,并且必须是特定于环境的东西。对于语言环境建议+1。 – ziesemer

+0

非常感谢!这是一个语言环境问题! – migueloop

1

似乎是一个语言环境相关的问题。

如果我设置法语语言环境,则该模式不起作用。如果我在SimpleDateFormat构造函数中将Locale设置为US,它确实可行。

SimpleDateFormat dFormat = new SimpleDateFormat(DATE_FORMAT,Locale.US);

+0

谢谢Olivier,它终于是一个Locale问题。 – migueloop