当我尝试与日期进行比较时,我遇到了Java Calendar类的一个莫名其妙的问题。我想和Calendars比较 并确定它们的差异是否>超过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。
答案 0 :(得分:5)
你的currDate是“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
?
答案 1 :(得分:3)
也许打印“Tue 5”和“Thu 6”的事实表明你的日期创作出了问题?
ps:无关紧要,但是做了cal.getTime()。getTime(),你可以做cal.getTimeInMillis()
答案 2 :(得分:0)
答案是使用JodaTime类。感谢您的介绍,我更容易获得我想要的结果,而不是Java难以使用的东西。
我将此作为Java.Util.Date和Java.Util.Calendar类的一个奇怪之处。
感谢您的帮助。