проблемы сравнения двух календарных дат в Android - PullRequest
2 голосов
/ 19 августа 2010

Я хотел сравнить текущую системную дату с датой исправления, но получить неверный результат. Пытаясь выяснить, в чем дело, я закончил со следующим кодом 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 октября) в порядке.

Есть ли какие-либо предположения о том, что я делаю неправильно, когда просто сравниваю две даты?

1 Ответ

5 голосов
/ 19 августа 2010

В объекте Calendar месяц равен 0, поэтому август должен быть 7, а октябрь - 9.

Поэтому вам просто нужно поменять «наборы», чтобы они имели правильные числа, и это должно работать нормально.

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

// 1st of October 2010
calFix.set( 2010, 9, 1 ); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...