Как рассчитать количество дней между датами с учетом смены дня? - PullRequest
2 голосов
/ 10 января 2012

Я нашел такой совет:

Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.set(2007, 01, 10);
calendar2.set(2007, 07, 01);
long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffSeconds = diff / 1000;
long diffMinutes = diff / (60 * 1000);
long diffHours = diff / (60 * 60 * 1000);
long diffDays = diff / (24 * 60 * 60 * 1000);

Но при смене времени с зимы на лето разница в 1 час.Есть ли общий метод для расчета этого?Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 января 2012

Вам необходимо установить часовой пояс каждого Календаря.

http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#getInstance%28java.util.TimeZone%29

Кстати: Joda Time может быть более удачным решением.

Java не поддерживает скачоксекунд.Таким образом, он рассматривает UTC как то же самое, что и время по Гринвичу.

2 голосов
/ 10 января 2012

Вам следует рассмотреть возможность использования библиотеки joda-time, которая предоставляет гораздо более полезный интерфейс даты и времени. Например, ваш вопрос решается так: Days.daysBetween(startInstant, endInstant).getDays()

Что касается использования стандартного Календаря - я не могу рассмотреть лучшую альтернативу, чем использование Calendar.get (Calendar.DAY_OF_YEAR) - это даст вам возможность получать разницу в днях в течение одного календарного года. Чтобы распространить этот метод на несколько лет, я могу предложить только повторять все промежуточные годы между моментами начала и конца, суммируя Calendar.getActualMaximum (DAY_OF_YEAR). Не очень удобный способ, но ...

...