Как создать объект Java Date полночь сегодня и полночь завтра? - PullRequest
166 голосов
/ 28 июля 2011

В моем коде мне нужно найти все мои вещи, которые произошли сегодня.Поэтому мне нужно сравнить даты с сегодняшнего дня в 00:00 (полночь рано утром) до 12:00 (полночь сегодня вечером).

Я знаю ...

Date today = new Date(); 

..Получи меня прямо сейчас.И ...

Date beginning = new Date(0);

... дает мне нулевое время 1 января 1970 года. Но как проще получить нулевое время сегодня и нулевое время завтра?

ОБНОВЛЕНИЕ;Я сделал это, но наверняка есть более простой способ?

Calendar calStart = new GregorianCalendar();
calStart.setTime(new Date());
calStart.set(Calendar.HOUR_OF_DAY, 0);
calStart.set(Calendar.MINUTE, 0);
calStart.set(Calendar.SECOND, 0);
calStart.set(Calendar.MILLISECOND, 0);
Date midnightYesterday = calStart.getTime();

Calendar calEnd = new GregorianCalendar();
calEnd.setTime(new Date());
calEnd.set(Calendar.DAY_OF_YEAR, calEnd.get(Calendar.DAY_OF_YEAR)+1);
calEnd.set(Calendar.HOUR_OF_DAY, 0);
calEnd.set(Calendar.MINUTE, 0);
calEnd.set(Calendar.SECOND, 0);
calEnd.set(Calendar.MILLISECOND, 0);
Date midnightTonight = calEnd.getTime();

Ответы [ 19 ]

1 голос
/ 08 апреля 2018

В значительной степени, как и раньше, но никто не упомянул параметр AM_PM:

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    cal.set(Calendar.AM_PM, Calendar.AM);
1 голос
/ 31 октября 2016

Из-за одного дня 24 * 60 * 60 * 1000 мс, полночь этого дня можно рассчитать как ...

long now = System.currentTimeMillis();
long delta = now % 24 * 60 * 60 * 1000;
long midnight = now - delta;
Date midnightDate = new Date(midnight);`
0 голосов
/ 16 ноября 2018

Использование Apache Commons ..

//For midnight today 
Date today = new Date(); 
DateUtils.truncate(today, Calendar.DATE);

//For midnight tomorrow   
Date tomorrow = DateUtils.addDays(today, 1); 
DateUtils.truncate(tomorrow, Calendar.DATE);
0 голосов
/ 17 августа 2018

Старомодный способ ..

private static Date getDateWithMidnight(){
    long dateInMillis = new Date().getTime();
    return new Date(dateInMillis - dateInMillis%(1000*60*60*24) - TimeZone.getDefault().getOffset(dateInMillis));
}
0 голосов
/ 14 августа 2018
Date now= new Date();
// Today midnight
Date todayMidnight = new Date(endTime.getTime() -endTime.getTime()%DateUtils.MILLIS_PER_DAY);

// tomorrow midnight
Date tomorrowMidnight = new Date(endTime.getTime() -endTime.getTime()%DateUtils.MILLIS_PER_DAY + DateUtils.MILLIS_PER_DAY);
0 голосов
/ 28 июня 2017
Date todayMidnightUTC = java.sql.Date.valueOf(LocalDate.now());
Date tomorrowMidnightUTC = java.sql.Date.valueOf(LocalDate.now().plusDays(1));
Date anyMidnightLocal = java.sql.Date.valueOf(LocalDate.from(dateTime.toInstant().atZone(ZoneId.systemDefault())));

Но учтите, что java.sql.Date.toInstant() всегда выбрасывает UnsupportedOperationException.

Через LocalDate в java.util.Date и наоборот, самое простое преобразование?

0 голосов
/ 02 апреля 2013
0 голосов
/ 20 февраля 2014

Самый простой способ с JodaTime

DateMidnight date = DateMidnight.now();

0 голосов
/ 28 ноября 2014

Я знаю, что это очень старый пост. Я думал поделиться своими знаниями здесь!

Для даты Сегодня ночью с точным часовым поясом вы можете использовать следующие

public static Date getCurrentDateWithMidnightTS(){

    return new Date(System.currentTimeMillis() - (System.currentTimeMillis()%(1000*60*60*24)) - (1000*60 * 330));
}

Где (1000*60 * 330) вычитается, то есть фактически связано с часовым поясом, например, индийский часовой пояс, то есть Калькутта отличается на +5: 30 часов от фактического. Так вычитая это с преобразованием в миллисекунды.

Таким образом, измените последний вычитаемый номер в соответствии с вами. Я создаю продукт, т. Е. Базируюсь только в Индии, поэтому просто использовал конкретную временную метку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...