日期不匹配

jn1*_*1kk 0 java time calendar date

我有一个TreeMap <DDate, Integer>.

DDate只包含月份和年份(月份为0索引,如Java,JAN = 0);

我的比较并没有回归正确的事情:

@Override
public int compareTo(DDDate o) {

    Calendar cal1 = Calendar.getInstance();
    cal1.setTimeZone(TimeZone.getTimeZone("UTC"));
    cal1.set(year, month, 1); // year is 2012, month is 1

    Calendar cal2 = Calendar.getInstance();
    cal2.setTimeZone(TimeZone.getTimeZone("UTC"));
    cal2.set(o.getYear(), o.getMonth(), 1); // year is 2012, month is 1


    Log.log("COMPARING: " + format.format(cal1.getTime())); // COMPARING: 20120101
    Log.log("COMPARING: " + format.format(cal2.getTime())); // COMPARING: 20120101

    Log.log((cal1.getTime().getTime())); // 1325413927678
    Log.log((cal2.getTime().getTime())); // 1325413927679

    Log.log("WILL RETURN: " + cal1.getTime().compareTo(cal2.getTime())); // WILL RETURN: -1

    return cal1.getTime().compareTo(cal2.getTime());

}
Run Code Online (Sandbox Code Playgroud)

为什么同一日期的两个Calendar对象中存在缺陷?(1325413927678 vs 1325413927679)

谢谢!

仅供参考:此方法有效一段时间,然后在某一点停止工作.

PS - 我明白这是矫枉过正,我可以有一个更简单的比较,但请幽默我.

EDIT-FIX

使用JodaTime的LocalDate.

或者这样做:

Calendar cal1 = Calendar.getInstance();
cal1.setTimeZone(TimeZone.getTimeZone("UTC"));
cal1.clear();
cal1.set(year, month, 1); // year is 2012, month is 1
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

您正在设置年,月和日 - 但这不会改变一天中时间.内部时钟必须在两次调用之间勾选Calendar.getInstance,因此它们具有不同的"自Unix纪元以来的毫秒"值.

我个人建议你使用约达时间,而不是java.util.Calendarjava.util.Date-这样你可以代表你真正感兴趣的,如LocalDate.