在Android中比较两个日历日期的问题

时间:2010-08-18 20:00:56

标签: java android date calendar compare

我想将当前系统日期与修复日期进行比较,但得到错误的结果。通过尝试找出错误,我结束了以下Java代码:

    // 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:9
deltaSystem:-25
isAfter1:false
isAfter2:false
isBefore1:true isBefore2:是的 milliChanged1:1283369971809
milliChanged2:1288640371809
milliOlder:1282160371809
milliToday:1282160371800

deltaOlder和deltaSystems的细微差别是由于执行时间,这没有问题。 但是今天(8月18日)和第一个设定日期(8月1日)的比较结果是错误的IMO。 isAfter1应为true且isBefore1应为false; 与第二个设定日期(10月1日)的比较是可以的。

在比较两个日期的简单事情中,我做错了什么?

1 个答案:

答案 0 :(得分:5)

在Calendar对象中,month是0,所以August应该是7,而October应该是9。

因此,您只需要更改“套”以获得正确的数字,它应该可以正常工作。

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

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