2015-02-21 8 views
3

Для моей программы мне нужно округлить отметку времени (в мс) до ближайшего дня. Для того, чтобы округлить до нескольких часов, я просто сделать это:Как округлить время до ближайшего дня?

private static long roundToHour(long time) 
{ 
    //Add 0.5 hours and then cut off everything unnecessary. 
    time += 1800000; 
    time = time/(3600000); 
    return time*3600000; 
} 

Но когда я пытаюсь сделать нечто подобное с весь день, код 2 часа прочь. Может ли кто-нибудь сказать мне, почему?

private static long roundToDay(long time) 
{ 
    time += 43200000; 
    time = time/86400000; 
    return time*86400000; 
} 
+0

@Marcus они делают целое (длинное) деление. – will

ответ

4

двухчасовой ошибка происходит из-за часовые пояса.

Вы можете либо добавить двухчасовую настройку самостоятельно, либо использовать библиотеку, например, Calendar или Joda-Time.

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

+0

* так много * правила и особые случаи. – will

+0

Глупые часовые пояса ... Но спасибо, я постараюсь сделать это с помощью Calendar/Joda. – BoboAUT

0

вы можете просто использовать java.util.Calendar очень легко.

Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(time); 

cal.get(Calendar.DAY_OF_MONTH); 
cal.get(Calendar.HOUR_OF_DAY); 
cal.get(Calendar.DAY_OF_WEEK); 

Таким образом, вы можете легко выяснить, что ближайший день с результатами

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