¿Cómo crear un objeto Java Date de medianoche de hoy y medianoche de mañana?

Resuelto asked hace 13 años • 20 respuestas

En mi código necesito encontrar todas las cosas que sucedieron hoy. Por lo tanto, necesito comparar las fechas desde hoy a las 00:00 a. m. (medianoche temprano esta mañana) hasta las 12:00 p. m. (medianoche esta noche).

Lo sé ...

Date today = new Date(); 

... me atrapa ahora mismo. Y ...

Date beginning = new Date(0);

... me da tiempo cero el 1 de enero de 1970. Pero, ¿cuál es una manera fácil de obtener tiempo cero hoy y mañana?


ACTUALIZAR

Hice esto, pero seguramente hay una manera más fácil.

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();
 avatar Jul 28 '11 03:07
Aceptado

java.util.Calendario

// today    
Calendar date = new GregorianCalendar();
// reset hour, minutes, seconds and millis
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);

// next day
date.add(Calendar.DAY_OF_MONTH, 1);

JDK 8: java.time.LocalTime y java.time.LocalDate

LocalTime midnight = LocalTime.MIDNIGHT;
LocalDate today = LocalDate.now(ZoneId.of("Europe/Berlin"));
LocalDateTime todayMidnight = LocalDateTime.of(today, midnight);
LocalDateTime tomorrowMidnight = todayMidnight.plusDays(1);

Tiempo Joda

Si estás usando un JDK <8, recomiendo Joda Time , porque la API es realmente buena:

DateTime date = new DateTime().toDateMidnight().toDateTime();
DateTime tomorrow = date.plusDays(1);

Dado que la versión 2.3 de Joda Time DateMidnightestá obsoleta , use esto:

DateTime today = new DateTime().withTimeAtStartOfDay();
DateTime tomorrow = today.plusDays(1).withTimeAtStartOfDay();

Pase una zona horaria si no desea la zona horaria predeterminada actual de la JVM.

DateTimeZone timeZone = DateTimeZone.forID("America/Montreal");
DateTime today = new DateTime(timeZone).withTimeAtStartOfDay(); // Pass time zone to constructor.
timaschew avatar Jul 27 '2011 20:07 timaschew

Para completar, si está utilizando Java 8 , también puede utilizar el truncatedTométodo de la Instantclase para obtener la medianoche en UTC .

Instant.now().truncatedTo(ChronoUnit.DAYS);

Como está escrito en el Javadoc

Por ejemplo, truncar con la unidad MINUTOS se redondeará hacia abajo al minuto más cercano, estableciendo los segundos y nanosegundos en cero.

Espero eso ayude.

riccardo.cardin avatar Nov 07 '2016 14:11 riccardo.cardin

La forma más sencilla de encontrar la medianoche:

Long time = new Date().getTime();
Date date = new Date(time - time % (24 * 60 * 60 * 1000));

Día siguiente:

Date date = new Date(date.getTime() + 24 * 60 * 60 * 1000);
Andrei Volgin avatar Sep 07 '2012 13:09 Andrei Volgin