2010-06-22 7 views
6

Necesito calcular un java.util.Date para el comienzo de un día de hoy (00:00:00 a.m. de un día de hoy). ¿Alguien sabe algo mejor que Reposición de los campos de java.util.Calendar:¿Cómo calcular una fecha para un 00:00:00 a.m. de hoy?

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.AM_PM, Calendar.AM); 
cal.set(Calendar.HOUR, 0); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 0); 
+0

Eso no es tan malo. –

+0

Pero me gusta la brevedad ... – Nulldevice

+2

luego envuélvalo en un método llamado 'getTodayAtMidnight()' –

Respuesta

7

Si no te molestan las zonas horarias, entonces tu solución está bien. De lo contrario, vale la pena mirar JodaTime.

Si finalmente decide cambiarse a JodaTime, puede usar la clase DateMidnight que se supone debe usarse en su situación.

1

estoy en el mismo barco, y lo que has proporcionado es cómo lo hago. Lo tengo en una función DateUtil.stripToMidnight(...) ...

Pero solo recuerde considerar TimeZones al hacer todo esto, como a las 0:00 am aquí, no será lo mismo en otra parte del mundo.

Puede haber una manera de hacer esto en JodaTime, pero no lo sé.

0

Otra opción sin bibliotecas adicionales:

import java.sql.Date; 

public class DateTest { 
    public static void main(String[] args) { 
     long MS_PER_DAY = 24L * 60 * 60 * 1000; 
     long msWithoutTime = (System.currentTimeMillis()/MS_PER_DAY) * MS_PER_DAY; 
     Date date = new Date(msWithoutTime); 
     System.out.println(date.toGMTString()); 
    } 
} 
+0

días no son siempre 24 horas. (sugerencia: días de verano) – Pac0

4

El siguiente código volverá objeto de calendario de la fecha actual con el tiempo como 00:00:00

Calendar current = Calendar.getInstance(); 
current.set(current.get(Calendar.YEAR),current.get(Calendar.MONTH),current.get(Calendar.DATE),0,0,0); 

No tendrá en cuenta los valores de zona horaria y es casi lo mismo que tu código. La única diferencia es que todo se restablece a 0 en una sola línea.

+0

Establece la hora en 12 en lugar de 0 – prashu132

1

Con la date4j biblioteca:

DateTime start = dt.getStartOfDay(); 
2

Esta solución puede ser mejor, ya que no hace uso de elementos pesados ​​de java Calendario

public class DateTest { 
    public static void main(String[] args) { 
     SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    long time = dateFormat.parse(dateFormat.format(new Date())).getTime(); 
    System.out.println("todays start date : " + new Date(time)); 
    } 
} 
0

A partir de java8, se puede hacer como sigue suponiendo no le importa la zona horaria

LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT); 
Date midnight = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); 
Cuestiones relacionadas