Java 非常令人困惑的一句话;ParseException:不可解析日期“;(SimpleDataFormat)错误

Java 非常令人困惑的一句话;ParseException:不可解析日期“;(SimpleDataFormat)错误,java,windows,macos,Java,Windows,Macos,我在两台计算机上运行了一个带有SimpleDataFormat.parse()的程序:一台Mac OS X笔记本电脑和一台Windows桌面电脑。在桌面上,日期解析抛出一个ParseException 代码很简单:newsimpledateformat(“E,d MMM yyy HH:mm:ss Z”).parse(“Wed,Jul 4 2001 12:08:56-0700”) Locale.getDefault在两台计算机上返回en_US java-version在Mac上返回1.6.0_65

我在两台计算机上运行了一个带有
SimpleDataFormat.parse()
的程序:一台Mac OS X笔记本电脑和一台Windows桌面电脑。在桌面上,日期解析抛出一个
ParseException

代码很简单:
newsimpledateformat(“E,d MMM yyy HH:mm:ss Z”).parse(“Wed,Jul 4 2001 12:08:56-0700”)

Locale.getDefault
在两台计算机上返回
en_US

java-version
在Mac上返回
1.6.0_65
,在抛出
ParseException
的Windows计算机上返回
1.7.0_21

我完全不明白为什么
ParseException
会发生在Windows环境中。有人会有线索吗


干杯。

这确实很奇怪。我只是在我的Windows8机器上尝试了相同的代码,运行jdk1.7.0_09,我得到了一个有效的结果,没有例外

public static void main(String[] args) {

    try {
        java.util.Date date = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss Z").parse("Wed, 4 Jul 2001 12:08:56 -0700");
        System.out.println("Date: " + date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
}

您是否尝试过在try{}catch{}块中包围它以查看异常情况?

Windows允许混合和匹配国际化设置,因此如果您更改日历格式(在“Region and Language”控制面板中),它会影响Java的日期解析,而不会影响
Locale.GetDefault
的结果


这是否是正确的行为值得商榷。它似乎没有被记录。

尝试
EEE
而不是
E
您是否尝试依次删除日期和日期格式中的位,以确定哪些特定字符导致了异常?@DavidWallace当我删除3个字母的日期时,它起作用:
新的SimpleDateFormat(“d mm yyy HH:mm:ss Z”)。解析(“2001年7月4日12:08:56-0700”)
有效。我尝试将三个字母的日期放回
EEE
作为
SimpleDateFormat
E
的替代,但没有解决问题。您可能需要再次检查“区域和语言”“有关用户帐户的设置。Windows允许混合和匹配设置,而这些设置不能用语言环境来表示,所以Java可能正在使用这些设置,而不是按照文档中的方式进行操作?另外,Windows电脑和Mac电脑在同一时区吗?好的,所以问题出在“Wed”上。如果运行
new DateFormatSymbols().getShortWeekdays()
,将返回什么?我已经在Linux上的OpenJDK 1.7.0上运行过它,在Windows XP上的Oracle 1.7.0上运行过它。这两种方法都可以正常工作,不会像预期的那样抛出ParseException。这就是注释的目的。@jackchanner我尝试了您的确切代码,在Windows计算机上触发了
ParseException
。为了它而将1.7.0_21替换为_45,但它并没有解决问题issue@Blackbird-当您在Windows计算机上尝试精确的代码时,VM抱怨了什么?例外情况的细节是什么?你是在Windows还是MAC OS X上编译这个类的?如果你在同一个平台上编译和运行会发生什么,或者你已经尝试过了吗?@jackchanner找到了解决方案,请参阅我在上面帖子中的评论。谢谢您的时间:)