当我尝试与日期进行比较时,我遇到了 Java Calendar 类无法解释的问题。我正在尝试与日历进行比较 并确定它们的差异是否大于 1 天,并根据该差异做事。但它不起作用。
如果我对这两个日期执行此操作:
String currDate = aCurrentUTCCalendar.getTime().toString();
String localDate = aLocalCalendar.getTime().toString();
我得到这些结果:
currDate = "Thu Jan 06 05:58:00 MST 2010"
localDate = "Tue Jan 05 00:02:00 MST 2010"
这是正确的。
但是如果我这样做:
long curr = aCurrentUTCCalendar.getTime().getTime();
long local = aLocalCalendar.getTime().getTime();
我得到了这些结果:(自纪元以来的毫秒数)
curr = -125566110120000
local = 1262674920000
由于两者之间只有大约 30 小时的差异,因此幅度差异很大,更不用说令人讨厌的负 签名。
如果我这样做会导致问题:
long day = 60 * 60 * 24 * 1000; // 86400000 millis, one day
if( local - curr > day )
{
// do something
}
怎么了?为什么 getTime().toString() 调用正确,但 getTime().getTime() 调用却大不相同?
我在 WinXP 上使用 jdk 1.6_06。由于各种原因无法升级JDK。
最佳答案
您的当前日期是“B.C.E. 2010-01-06”(Before Common Era),即 4019 (2x2010 - 1) 年前。
试试这个:
public class StrangeDate {
public static void main(String[] args) {
Date d = new Date(-125566110120000L);
System.out.println(d.toString());
//prints 'Thu Jan 06 13:58:00 CET 2010' in my locale
Calendar c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.YEAR, 4019);
System.out.println(c.getTime().toString());
//prints 'Wed Jan 06 13:58:00 CET 2010' in my locale
}
}
问题是:你做了什么得到这个aCurrentUTCCalendar
?
关于java - 为什么这个 Java 日历比较不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2492691/