2016-04-21 3 views
0

Я хочу округлить объект java.util.Date до конца дня, например. округление 2016-04-21T10:28:18.109Z до 2016-04-22T00:00:00.000Z.Круглый java.util.Date до конца дня

Я видел Java Date rounding, но не смог найти что-то сравнимое в конце дня. Это также не то же самое, что и how to create a Java Date object of midnight today and midnight tomorrow?, потому что я не хочу создавать новый Date (полночь сегодня или завтра), но в следующую полночь на основе любой даты.

+1

Но почему? Очевидно, вы используете Java 8, так почему бы просто не использовать новый API времени? – Tunaki

+0

Потому что это очень большой проект, где я не решаюсь использовать это. –

+5

Итак, вы можете использовать сторонние API, но не можете использовать встроенные JDK API-интерфейсы? Обычно это наоборот. – Tunaki

ответ

1

DateUtils.ceiling служит вашей цели. Перейдите Calendar.DATE для значения поля.

+0

Это то, что я ожидал. И это самое короткое решение. Спасибо. –

1

Учитывая документацию DateUtils, я не уверен, что верю в это.

Предполагая, что вы заинтересованы только в UTC день, вы можете воспользоваться тем, что эпоха Unix является на сегодняшний день границы:

public static Date roundUpUtcDate(Date date) { 
    long millisPerDay = TimeUnit.DAYS.toMillis(1); 
    long inputMillis = date.getTime(); 
    long daysRoundedUp = (inputMillis + (millisPerDay - 1))/millisPerDay; 
    return new Date(daysRoundedUp * millisPerDay); 
} 

Я сильно призываю вас, чтобы перейти к java.time API, если вы возможно может.

0

Традиционный

@Test 
public void testDateRound() throws ParseException { 
    Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").parse("2016-04-21T10:28:18.109Z"); 
    System.out.println(date); 
    Calendar cl = Calendar.getInstance(); 
    cl.setTime(date); 
    cl.set(Calendar.HOUR_OF_DAY, 23); 
    cl.set(Calendar.MINUTE, 59); 
    cl.set(Calendar.SECOND, 59); 
    cl.set(Calendar.MILLISECOND, 999); 
    System.out.println(cl.getTime()); 
    cl.add(Calendar.MILLISECOND, 1); 
    System.out.println(cl.getTime()); 
} 

Выход

Thu Apr 21 10:28:18 GMT+03:00 2016 
Thu Apr 21 23:59:59 GMT+03:00 2016 
Fri Apr 22 00:00:00 GMT+03:00 2016 
Смежные вопросы