Java日期解析

4

我在使用java.util.Date时遇到了一个愚蠢的问题。

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

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
显示异常跟踪 - korifey
1
使用 SimpleDateFormat 时要小心。它不是线程安全的。http://www.codefutures.com/weblog/andygrove/2007/10/simpledateformat-and-thread-safety.html - Gray
你的 “I'm” 和 “don't” 中的字符是什么? - Bhesh Gurung
3个回答

10
如果你的系统使用的语言环境不是英语,你需要使用这个构造函数:
SimpleDateFormat(DATE_FORMAT,Locale.ENGLISH);
如果这不是问题的原因,您应该使用相同的格式化程序格式化日期,并将输出与输入字符串进行比较。

5

我认为这段代码没有问题。我能够正常执行它,且返回如下结果:

Sat Dec 31 09:00:00 GMT 2011

2
没有堆栈跟踪,这是一个有效的尝试 - 至少表明代码中没有什么是“完全不正确”的,必须是某些特定于环境的问题。对于区域设置建议加1。 - ziesemer
非常感谢!这是一个本地化问题!! - migueloop

1
似乎是一个与Locale有关的问题。
如果我设置法国地区,模式无法工作。如果在SimpleDateFormat构造函数中将Locale设置为美国,则可以工作。
SimpleDateFormat dFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US);

谢谢Olivier,最终问题是Locale的问题。 - migueloop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接