2015-10-02 4 views
5

Я попытался рассчитать разницу между двумя датами, и я заметил одну вещь. При расчете только дней начинается переход на летнее время, поэтому результат будет короче с 1 днем.java.util.Date Рассчитать разницу в днях

Для получения точных результатов необходимо учитывать значение часов.

Например:

SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy"); 
Date dfrom = format.parse("03-29-2015"); 
Date dto = format.parse("03-30-2015"); 
long diff = dto.getTime() - dfrom.getTime(); 
System.out.println(diff); 
System.out.println("Days: "+diff/(24 * 60 * 60 * 1000)); 
System.out.println("Hours: "+diff/(60 * 60 * 1000) % 24); 

Выход:

82800000 
Days: 0 
Hours: 23 

ли кто-нибудь есть лучшее решение?

+3

Можете ли вы использовать java.time (Java 8) или Joda Time вместо этого? Оба сделают это намного проще. –

+3

Возможный дубликат [Расчет разницы между двумя экземплярами дат Java] (http://stackoverflow.com/questions/1555262/calculating-the-difference-between-two-java-date-instances) – Tom

+2

Основная причина - ваше предположение в строке 6, что каждый день имеет 24 часа, когда вы уже знаете, что интервал, который вы измеряете, содержит день, который составляет всего 23 часа. –

ответ

9

О да, лучшее решение есть!

Прекратите использование устаревшего класса java.util.Date и включите питание java.time API, встроенного в Java 8 и более поздних версий (tutorial). В частности, классы DateTimeFormatter, LocalDate и ChronoUnit.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy"); 
LocalDate date1 = LocalDate.parse("03-29-2015", formatter); 
LocalDate date2 = LocalDate.parse("03-30-2015", formatter); 
long days = ChronoUnit.DAYS.between(date1, date2); 
System.out.println(days); // prints 1