我有许多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);
无效。
有什么想法吗?
答案 0 :(得分:1)
"dd/mm/yy HH:ss"
mm
是一小时的分钟。您可能正在寻找MM
(一年中的某个月)。
另外,HH:ss
?不是HH:mm
或HH:mm:ss
?
答案 1 :(得分:0)
如果t.date
实际上是Date
个对象,则输入的格式无关紧要。它将比较Date
对象本身的字段。
因此,将文本日期转换为Date
对象几乎肯定是个问题。
我认为你需要调试那个进程并找出错误转换日期的原因(或者是否)。
首先,您应该使用的格式为:
dd/MM/yy HH:ss
小写m
(如here所示)是几分钟而不是几个月。我假设你的“{奇怪”HH:ss
是你想要的,即使它没有分钟说明符。
您可能也想检查一下。