我想将当前系统日期与修复日期进行比较,但得到错误的结果。通过尝试找出错误,我结束了以下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日)的比较是可以的。
在比较两个日期的简单事情中,我做错了什么?
答案 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 );