当我尝试与日期进行比较时,我遇到了Java Calendar类的一个无法解释的问题.我正在尝试与日历进行比较,并确定它们的差异是否超过1天,并根据这种差异做事.但它不起作用.
如果我这两个日期这样做:
String currDate = aCurrentUTCCalendar.getTime().toString();
String localDate = aLocalCalendar.getTime().toString();
Run Code Online (Sandbox Code Playgroud)
我得到这些结果:
currDate = "Thu Jan 06 05:58:00 MST 2010"
localDate = "Tue Jan 05 00:02:00 MST 2010"
Run Code Online (Sandbox Code Playgroud)
这是对的.
但如果我这样做:
long curr = aCurrentUTCCalendar.getTime().getTime();
long local = aLocalCalendar.getTime().getTime();
Run Code Online (Sandbox Code Playgroud)
我得到了这些结果:(自纪元以来的毫秒数)
curr = -125566110120000
local = 1262674920000
Run Code Online (Sandbox Code Playgroud)
由于两者之间只有大约30个小时的不同,因此幅度差别很大,更不用说恼人的负号了.
如果我这样做,这会导致问题:
long day = 60 * 60 * 24 * 1000; // 86400000 millis, one day
if( local - curr > day )
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
怎么了?为什么getTime().toString()调用正确,但getTime().getTime()调用有很大的不同?
我在WinXP上使用jdk 1.6_06.我出于各种原因无法升级JDK.
你的currDate是"BCE 2010-01-06"(普通时代之前),这是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
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:你做了什么才能得到这个aCurrentUTCCalendar?