gpt4 book ai didi

java - 日期不匹配

转载 作者:行者123 更新时间:2023-12-01 07:07:54 26 4
gpt4 key购买 nike

我有一个 <DDate, Integer> 的 TreeMap .

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());

}

为什么同一日期的两个日历对象存在差异? (1325413927678 与 1325413927679)

谢谢!

仅供引用:此方法会工作一段时间,然后在某个时刻停止工作。

附注- 我知道这太过分了,我可以有一个更简单的compareTo,但请幽默我。

编辑-修复

使用 JodaTime 的 LocalDate。

或者这样做:

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

最佳答案

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

我个人建议使用Joda Time而不是 java.util.Calendar 和 java.util.Date - 这样您就可以表示您真正感兴趣的内容,例如 LocalDate >.

关于java - 日期不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19637643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com