2010-08-18 68 views
2

我想比较当前系统日期和修复日期,但得到错误的结果。在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日)的比较可以。

任何建议我做错了简单的事情来比较两个日期?

回答

5

在日历对象中,月是从0开始,所以八月份应该是7和十月应该是9

因此,你只需要改变你的“套”有正确的数字,它应该工作精细。

// 1st of August 2010 
calFix.set(2010, 7, 1); 

// 1st of October 2010 
calFix.set(2010, 9, 1); 
+0

谢谢,我没有期待这样的答案,因为我有一个C#背景,而不是Java。但从0月份开始令我感到惊讶。基于0的星期几可以,但是这个月?! – infero 2010-08-18 20:18:13

+0

为什么它在一周中的某天或多或少有意义为0? – AHungerArtist 2010-08-18 20:24:01

+0

@infero我同意。这是违反直觉的。它应该全部为0或全部为1。 – 2010-08-18 20:24:06