пазл о разнице дат в java - PullRequest
       13

пазл о разнице дат в java

6 голосов
/ 02 февраля 2011

Я пытаюсь вычислить разницу во времени, но получаю странные результаты: Вот источник:

   import java.util.Calendar;
    import java.util.Collections;
    import java.util.Vector;

    public class Main {

        static Calendar dcal = Calendar.getInstance();
    static Calendar ccal = Calendar.getInstance();
    public static void main(String[] args) {
        dcal.set(2011, 1, 27);
        ccal.set(2011,2,1);
        long dtime = dcal.getTimeInMillis();
        long ctime = ccal.getTimeInMillis();
        long diff = ctime - dtime;
        int hours = (int) (diff / (1000 * 60 * 60));
        System.out.println("hours->"+hours);

    }

}

Когда я устанавливаю ccal на 1 31 2011, разница в дате составляет 96 часов, но когда я устанавливаю на 2 1 2011 разница в дате составляет 48 часов. Как это может быть? Что такое лекарство?

Спасибо

Эллиот

Ответы [ 2 ]

6 голосов
/ 02 февраля 2011

Если вы устанавливаете ccal следующим образом: «ccal.set(2011, 1, 31)», то дата на самом деле 3 марта 2001 года, поскольку месяцы начинаются с нуля и календарь по умолчанию катится. Таким образом, разница в 48 часов (96-48) является правильной, потому что между 1 марта (set(2011,2,1)) и 3 марта (set(2011,1,31)) есть два дня.

4 голосов
/ 02 февраля 2011

Вы знаете, что месяцы основаны на 0, верно?Так что 0 представляет январь, а 1 представляет февраль, так что 1 31 2011 не существует.На самом деле лучше вообще не использовать числа, а вместо этого использовать константы Календаря для месяцев, например: Calendar.JANUARY.Чтобы увидеть, что происходит, распечатайте в календаре соответствующую дату:

  ccal.set(2011, 1, 31);
  System.out.println(ccal.getTime());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...