Java SimpleDataFormat.parse()指定的空日期
我不想再发布一个简单的格式问题,但我在谷歌或其他帖子上找不到我的答案。下面是我的代码,注释指出了问题所在Java SimpleDataFormat.parse()指定的空日期,java,Java,我不想再发布一个简单的格式问题,但我在谷歌或其他帖子上找不到我的答案。下面是我的代码,注释指出了问题所在 // 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) {
// 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参数正确通过,我的position对象从0开始,我已经对照SimpleDataFormat检查了很多次。在我看来这是正确的,但我仍然测试了各种“d”和“H”的排列。我能想到的唯一一件事是,在使用它的过程中有一些细微的差别,我没有注意到,或者说我已经偏离了基准
它可以编译(JavaC1.6.0_33),但在运行(java版本“1.6.0_33”)时,它甚至不会处理传递给它的第一个日期字符串值。我运行的是64位日文版Windows7
非常感谢您的帮助。如果您计算机上的当前区域设置是日语(这里很可能是这种情况),那么
SimpleDateFormat
将只使用默认区域设置(日语)并尝试用它解析日期
如果日期字符串始终为英语,则应在中指定
Locale.US
如果计算机上的当前区域设置为日语(这里很可能是这种情况),则SimpleDataFormat
将只使用默认区域设置(日语)并尝试用它解析日期
如果日期字符串始终使用英语,则应在中指定
Locale.US
。尝试将“H:mm:ss”更改为“HH:mm:ss”,这是我尝试过的一种排列方式,但也不起作用(为了确定起见,重新编译了两次)。您确定代码是这样的吗?您没有任何尝试/捕获块吗?我认为parse
永远不会返回null-如果解析失败,它将抛出异常。逐字逐句,是的。它返回“java.lang.NullPointerException at java.util.Calendar.setTime(未知源)”,当我检查日期时,它为空。@jonsket From javadoc:parse返回从字符串解析的日期。如果出现错误,则返回null。尝试将“H:mm:ss”更改为“HH:mm:ss”,这是我尝试过的一种排列,但也不起作用(重新编译两次只是为了确保)。您确定代码是这样的吗?您没有任何尝试/捕获块吗?我认为parse
永远不会返回null-如果解析失败,它将抛出异常。逐字逐句,是的。它返回“java.lang.NullPointerException at java.util.Calendar.setTime(未知源)”,当我检查日期时,它为空。@jonsket From javadoc:parse返回从字符串解析的日期。如果出现错误,返回null。非常感谢。我添加了一行“Locale=newlocale(“US”);”并将“locale”变量放入我的SimpleDataFormat构造函数中。成功了!它显示的是“EDT”,而不是我想要的RFC822代码,但我可以在以后对其进行排序。非常感谢。我添加了一行“Locale=newlocale(“US”);”并将“locale”变量放入我的SimpleDataFormat构造函数中。成功了!它显示的是“EDT”,而不是我想要的RFC822代码,但我可以稍后对其进行排序。