你能告訴我,爲什麼fillowing代碼:怪異的行爲
int a = new GregorianCalendar(2015,3,31,7,45).compareTo(
new GregorianCalendar(2015,4,1,7,45);
System.out.println(a);
打印出0?
有沒有辦法讓它正常工作?
PS:我需要串出按日期排序,我用這個比較:
array.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
GregorianCalendar cal1 = new GregorianCalendar(Integer.parseInt(o1.replaceAll(p, "$7")),
Integer.parseInt(o1.replaceAll(p, "$6")), Integer.parseInt(o1.replaceAll(p, "$5")),
Integer.parseInt(o1.replaceAll(p, "$8")), Integer.parseInt(o1.replaceAll(p, "$9")));
GregorianCalendar cal2 = new GregorianCalendar(Integer.parseInt(o2.replaceAll(p, "$7")),
Integer.parseInt(o2.replaceAll(p, "$6")), Integer.parseInt(o2.replaceAll(p, "$5")),
Integer.parseInt(o2.replaceAll(p, "$8")), Integer.parseInt(o2.replaceAll(p, "$9")));
return cal1.compareTo(cal2);
}
});
它使用正則表達式,但它是正確排序,僅供日期進行排序的權利。
Oooh,這裏是訣竅,Java中的月份是基於0的......這真的很奇怪。 感謝您爲我開放這個技巧! – 2015-04-01 15:46:10
@DenisYakovenko:這是直接的問題 - 但請不要只是把這個教訓帶走。還有其他方法可以非常顯着地改進這個代碼... – 2015-04-01 15:46:46
好吧,數組排序只是任務的一小部分,我有義務使用Java 7,但我會堅持您的建議) 什麼是你的意思是「非常顯着」?你的意思是以這種方式使用正則表達式太貴了? – 2015-04-01 15:48:42