Раунд java.util. Дата до конца дня

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

Я видел округление даты Java, но не смог найти что-то сопоставимое на конец дня. Это также не то же самое, что создание Java-объекта Date в полночь сегодня и в полночь завтра? потому что я не хочу создавать новый Date (полночь сегодня или завтра), но следующая полночь основана на любой дате.

3 ответа

Решение

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

Учитывая документацию 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, если возможно, хотя.

Традиционный способ

@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
Другие вопросы по тегам