null由SimpleDateFormat.parse()分配的日期

问题描述:

我讨厌发布另一个SimpleDateFormat问题,但我无法在Google或其他主题上找到我的答案。我的代码在下面,注释表明问题。null由SimpleDateFormat.parse()分配的日期

// The dateString format is "Thu Jul 19 00:04:11 +0000 2012". I confirmed that there 
// is no preceding or trailing white space. 
public static GregorianCalendar stringToDate(String dateString) { 

    GregorianCalendar calendar = new GregorianCalendar(); 

    ParsePosition pos = new ParsePosition(0); 

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM d H:mm:ss Z yyyy"); 

    Date date = simpleDateFormat.parse(dateString, pos); 


    // 'Unknown Source' error thrown by setTime() as date is ultimately null. 
    calendar.setTime(date); 

    return calendar; 

} 

我已经证明了我的dateString参数来通过正确的,我的位置对象从0开始,我已经对http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html审查SimpleDateFormat的无数次。它看起来很合适,但我仍然测试了'd'和'H'的各种排列。我唯一能想到的是,使用这个我失踪的东西还是有一些细微的差别,或者我是远离基地的。

这编译(javac 1.6.0_33),但运行时(java版本“1.6.0_33”),即使传递给它的第一个dateString值也不会处理。我正在运行Windows 7 64位,日文版。

任何帮助,非常感谢。

+2

尝试更改“H:mm:ss”为“HH:mm:ss” – 2012-07-19 05:44:09

+0

这是我尝试过的一种排列方式,但它也不起作用(重新编译两次以确保)。 – Structure 2012-07-19 05:47:48

+1

你确定*这就是你的代码的样子?你没有任何try/catch块?我不认为'parse'永远不会返回null - 如果解析失败,它会抛出异常。 – 2012-07-19 05:50:21

如果您的计算机上的当前语言环境是日语(这很可能是这种情况),那么SimpleDateFormat将采用默认语言环境(日语),并尝试用它解析日期。

如果日期字符串始终为英文,则应在SimpleDateFormat constructor中指定Locale.US

+0

非常感谢。我添加了一行'Locale locale = new Locale(“US”);'并将'locale'变量放到我的SimpleDateFormat构造函数中。这工作!它显示'EDT',而不是我想要的RFC822代码,但我可以稍后再分类。 – Structure 2012-07-19 06:06:04