2015-03-11 5 views
0

Я пытаюсь рассчитать разницу между двумя датами. Разница состоит из оставшихся дней, часов, минут, секунд.Вычисление ошибки разницы во времени

Я использую этот метод:

public static void computeDiff(Date date2) { 
     Date date1 = new Date(); 
     long diffInMillies = date2.getTime() - date1.getTime(); 

     long milliesRest = diffInMillies; 

     for (TimeUnit unit : timeUnitsArrayList) { 
      long diff = unit.convert(milliesRest, TimeUnit.MILLISECONDS); 
      long diffInMilliesForUnit = unit.toMillis(diff); 
      milliesRest -= diffInMilliesForUnit; 
      result.put(unit, diff); 
     } 
} 

/* 
TimeUnit = java.util.concurrent.TimeUnit 
timeUnitsArrayList = A list with units: DAYS, HOURS, MINUTES, SECONDS 
date1 = java.util.Date (date now) 
date2 = java.util.Date (a date with time 00:00:00) 
*/ 

Я привожу пример: если я хочу разницу между сегодняшним днем ​​и до 20 марта 2015, разница будет в порядке (8 дней, X часов, Y минут, Z секунд), но если я выберу более старую дату, например, 20 апреля 2015 года, разница составит 39 дней (нормально), X - 1 час (что не так, потому что неправильно вычисляется), Y минут (ok), Z секунд (ok).

Является ошибкой Java или ошибкой в ​​моем коде? Потому что, если я выбрать более раннюю дату, часы в порядке, но если я выбрать более старую дату я получаю часы неправильно (один меньше часа)

Спасибо

+0

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

+0

летнее время –

+0

Это действительно помогло бы, если бы вы предоставили конкретный пример в виде короткой, но полной программы, демонстрирующей проблему, объясняя * почему * вы ожидаете, что результат будет определенным образом. Похоже, это почти наверняка проблема летнего времени, но трудно дать ответ без дополнительной информации. –

ответ

3

Это, скорее всего, проблема с переходом на переход на летнее время - в центральной Европе изменение происходит 29 марта, поэтому в вашем часовом поясе (где бы это ни было) это может быть похоже и будет составлять 1 час.

+0

Я никогда не думал об этой возможности. Спасибо, что ответили мне так быстро! – Ghita

Смежные вопросы