我想比较当前系统日期和修复日期,但得到错误的结果。在Android中比较两个日历日期的问题
// today, 18th of August 2010
long currSystem = System.currentTimeMillis();
Calendar calToday = Calendar.getInstance();
Calendar calFix = Calendar.getInstance();
long milliToday = calToday.getTimeInMillis();
long milliOlder = calFix.getTimeInMillis();
long deltaOlder = milliOlder - milliToday;
long deltaSystem = currSystem - milliToday;
// 1st of August 2010
calFix.set(2010, 8, 1);
long milliChanged1 = calFix.getTimeInMillis();
long deltaChanged1 = milliChanged1 - milliToday;
boolean isAfter1 = calToday.after(calFix);
boolean isBefore1 = calToday.before(calFix);
// 1st of October 2010
calFix.set(2010, 10, 1);
long milliChanged2 = calFix.getTimeInMillis();
long deltaChanged2 = milliChanged2 - milliToday;
boolean isAfter2 = calToday.after(calFix);
boolean isBefore2 = calToday.before(calFix);
在调试程序的结果是:
currSystem:1282160371775
deltaChanged1:1209600009
deltaChanged2:6480000009
deltaOlder试图找出什么是错的,我用下面的Java代码结束:9
deltaSystem:-25
isAfter1:false
isAfte R2:假
isBefore1:真 isBefore2:真 milliChanged1:1283369971809
milliChanged2:1288640371809
milliOlder:1282160371809
milliToday:1282160371800
为deltaOlder和deltaSystems小的差异是由于执行时间, 那没问题。 但是今天(8月18日)和第一次设定日期(8月1日)的比较结果是错误的IMO。 isAfter1应该是true,isBefore1应该是false; 与第二套日期(10月1日)的比较可以。
任何建议我做错了简单的事情来比较两个日期?
谢谢,我没有期待这样的答案,因为我有一个C#背景,而不是Java。但从0月份开始令我感到惊讶。基于0的星期几可以,但是这个月?! – infero 2010-08-18 20:18:13
为什么它在一周中的某天或多或少有意义为0? – AHungerArtist 2010-08-18 20:24:01
@infero我同意。这是违反直觉的。它应该全部为0或全部为1。 – 2010-08-18 20:24:06