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位,日文版。
任何帮助,非常感谢。
如果您的计算机上的当前语言环境是日语(这很可能是这种情况),那么SimpleDateFormat
将采用默认语言环境(日语),并尝试用它解析日期。
如果日期字符串始终为英文,则应在SimpleDateFormat
constructor中指定Locale.US
。
非常感谢。我添加了一行'Locale locale = new Locale(“US”);'并将'locale'变量放到我的SimpleDateFormat构造函数中。这工作!它显示'EDT',而不是我想要的RFC822代码,但我可以稍后再分类。 – Structure 2012-07-19 06:06:04
尝试更改“H:mm:ss”为“HH:mm:ss” – 2012-07-19 05:44:09
这是我尝试过的一种排列方式,但它也不起作用(重新编译两次以确保)。 – Structure 2012-07-19 05:47:48
你确定*这就是你的代码的样子?你没有任何try/catch块?我不认为'parse'永远不会返回null - 如果解析失败,它会抛出异常。 – 2012-07-19 05:50:21