Получить дни между java.util.Dates, игнорируя переход на летнее время
Быстрый и грязный хак:
public int get_days_between_dates(Date date1, Date date2)
{
//if date2 is more in the future than date1 then the result will be negative
//if date1 is more in the future than date2 then the result will be positive.
return (int)((date2.getTime() - date1.getTime()) / (1000*60*60*24l));
}
Эта функция будет работать в 99,99% случаев, за исключением случаев, когда она неожиданно вас удивит в крайних случаях в течение високосных секунд, перехода на летнее время, смены часового пояса, високосных лет и т. П. Если вы согласны с тем, что время от времени расчет отключается на 1 (или 2) часа, этого будет достаточно.
Получите дни между датами с учетом дополнительных секунд, летнего времени, часовых поясов и т. Д.
Если вы задаете этот вопрос, вам нужно дать себе пощечину. Что означает, что две даты должны быть на расстоянии как минимум 1 день? Это очень запутанно. Что если одна дата - полночь в одном часовом поясе, а другая - 1:00 в другом часовом поясе? В зависимости от того, как вы его интерпретируете, ответ будет 1 и 0.
Вы думаете, что можете просто указать даты, которые вы передаете в вышеуказанную функцию, как универсальный формат времени, что устранит некоторые ваши проблемы. Но затем вы просто перемещаете проблему в то, как вы конвертируете свое местное время в универсальное время. Логическое преобразование из вашего часового пояса в универсальное время может быть не совсем интуитивным. В некоторых случаях вы получите разницу в днях, когда пройденные даты, очевидно, разделены на два дня.
И вы думаете, что справитесь с этим? В мире существует несколько запаздывающих Календарных систем, которые постоянно меняются в зависимости от сезона сбора урожая и установленных политических правителей. Если вы хотите перевести свое время в UTC, java.util.Date в самый неподходящий момент вас подведет.
Если вам нужно рассчитать дни между датами, и очень важно, чтобы все получилось правильно, вам нужно получить внешнюю библиотеку Joda Time: (Они позаботились обо всех деталях для вас, чтобы вы могли оставаться в блаженстве не подозревая о них): http://joda -time.sourceforge.net / index.html