Я хотел сравнить текущую системную дату с датой исправления, но получить неверный результат. Пытаясь выяснить, в чем дело, я закончил со следующим кодом 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
Сегодня: 1282160371800
Небольшие различия для deltaOlder и deltaSystems обусловлены временем выполнения, это не проблема.
Но результаты сравнения сегодняшнего (18 августа) и первого установленного срока (1 августа) неверны ИМО. isAfter1 должно быть истинным, а isBefore1 должно быть ложным;
Сравнение со второй установленной датой (1 октября) в порядке.
Есть ли какие-либо предположения о том, что я делаю неправильно, когда просто сравниваю две даты?