对Java Date对象进行排序和比较会产生意外结果

时间:2012-03-11 01:21:02

标签: java date locale

我有许多java Date对象,我试图按递增的日期顺序排序。

这些是使用英国格式“dd / mm / yy HH:ss”的简单日期格式器从CSV加载的,并以相同的格式输出,例如

new SimpleDateFormat("dd/mm/yy HH:ss", Locale.ENGLISH);

这是正常的。

但是,当我尝试对它们进行排序时(通过实现Comparator接口),它们的排序错误,看起来似乎是美国日期格式(mm / dd / yy)。

    public int compare(CSVEntry t, CSVEntry t1) {
        if (t.date.before(t1.date))
            return -1;
        else if (t.date.after(t1.date))
            return 1;
        else
            return 0;
    }

这与我使用的方法(Date.after()或Date.before()或Date.compareTo)无关,无论区域设置是什么。

我尝试使用以下方法设置系统默认本地:

Locale.setDefault(Locale.ENGLISH);

无效。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

"dd/mm/yy HH:ss"

mm是一小时的分钟。您可能正在寻找MM(一年中的某个月)。

另外,HH:ss?不是HH:mmHH:mm:ss

答案 1 :(得分:0)

如果t.date实际上是Date个对象,则输入的格式无关紧要。它将比较Date对象本身的字段。

因此,将文本日期转换为Date对象几乎肯定是个问题。

我认为你需要调试那个进程并找出错误转换日期的原因(或者是否)。

首先,您应该使用的格式为:

dd/MM/yy HH:ss

小写m(如here所示)是几分钟而不是几个月。我假设你的“{奇怪”HH:ss是你想要的,即使它没有分钟说明符。

您可能也想检查一下。