Saltar al contenido

¿Cómo configurar la hora de la instancia java.util.Date a las 00:00:00?

Al fin luego de tanto trabajar pudimos encontrar el resultado de este conflicto que ciertos de nuestros usuarios de este sitio web han tenido. Si quieres aportar algo puedes compartir tu comentario.

Solución:

Para quitar el tiempo de la Date objeto completamente, podrías usar esto:

public static Date removeTime(Date date)     
        Calendar cal = Calendar.getInstance();  
        cal.setTime(date);  
        cal.set(Calendar.HOUR_OF_DAY, 0);  
        cal.set(Calendar.MINUTE, 0);  
        cal.set(Calendar.SECOND, 0);  
        cal.set(Calendar.MILLISECOND, 0);  
        return cal.getTime(); 
    

Pasar al método el Date objeto que desea modificar y devolverá un Date que no tiene horas/minutos, etc.

Si no es necesario cambiar el objeto Fecha en sí, use SimpleDateFormat. Establezca el formato de la manera que desee, es decir. eliminar horas/minutos. Luego llame al método de formato y pase el Date objeto que desea cambiar.

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy");
System.out.println(sdf.format(yourDate));

tl; dr

Si te referías a la medianoche en UTC en un antiguo legado java.util.Date objeto…

java.util.Date.from(
    OffsetDateTime.of( 
        LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
        LocalTime.MIN ,
        ZoneOffset.UTC
    ).toInstant()
)

Si es posible, descartar el legado Date parte de arriba y solo use el moderno java.time.OffsetDateTime o java.time.Instant objeto…

OffsetDateTime.of( 
    LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
    LocalTime.MIN ,
    ZoneOffset.UTC
).toInstant()

Si se refería a la medianoche en una zona horaria particular en lugar de UTC…

LocalDate.now()
         .atStartOfDay()

Es mejor especificar la zona horaria deseada/esperada que confiar implícitamente en el valor predeterminado actual.

LocalDate.now( ZoneId.of( "Pacific/Auckland" )  )
         .atStartOfDay( ZoneId.of( "Pacific/Auckland" ) )

Detalles

Precaución: No todos los días en todas las zonas horarias tienen una hora de 00:00:00. El horario de verano puede saltar a la 1 a. m., eliminando la medianoche.

java.tiempo

Uso de clases java.time que suplantan las antiguas y problemáticas clases heredadas de fecha y hora, como java.util.Date y .Calendar.

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate localDate = LocalDate.now( z );
ZonedDateTime zdt = localDate.atStartOfDay( z );

Convertir a/desde clases heredadas

Debe ceñirse a las clases modernas de java.time siempre que sea posible. Pero si debe tener instancias de las antiguas clases heredadas, puede convertir a/desde java.time. Mirar hacia nuevos métodos añadidos a las clases antiguas.

Calendar myLegacyCal = GregorianCalendar.from( zdt ) ;

Date myLegacyDate = Date.from( zdt.toInstant() ) ;

si quieres un java.util.Dateque siempre está en la zona horaria UTC, para tener una hora del día de 00:00:00, use OffsetDateTime con la constante ZoneOffset.UTC.

OffsetDateTime odt = OffsetDateTime.of( localDate , LocalTime.MIN , ZoneOffset.UTC ) ;
Date myLegacyDate = Date.from( odt.toInstant() ) ;

Acerca de java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases reemplazan a las antiguas y problemáticas clases heredadas de fecha y hora, como java.util.Date, Calendar& SimpleDateFormat.

El proyecto Joda-Time, ahora en modo de mantenimiento, aconseja la migración a las clases java.time.

Para obtener más información, consulte el Tutorial de Oracle. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.

¿Dónde obtener las clases java.time?

  • Java SE 8, Java SE 9y después
    • Incorporado.
    • Parte de la API de Java estándar con una implementación integrada.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y Java SE 7
    • Gran parte de la funcionalidad de java.time está adaptada a Java 6 y 7 en ThreeTen-Backport.
  • Androide
    • los TresDiezABP el proyecto se adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
    • Ver Cómo usar ThreeTenABP….

los ThreeTen-Extra proyecto extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuartery más.


Joda-Tiempo

ACTUALIZACIÓN: El proyecto Joda-Time ahora está en modo de mantenimiento. El equipo recomienda la migración a las clases java.time. Esta sección quedó intacta como historia.

Use Joda-Time 2.3, con un método para este mismo propósito: withTimeAtStartOfDay().

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;

DateTime now = new DateTime();
DateTime firstMomentOfToday = now.withTimeAtStartOfDay();

System.out.println( "now: " + now );
System.out.println( "firstMomentOfToday: " + firstMomentOfToday );

Cuando se ejecuta…

now: 2013-12-05T23:00:23.785-08:00
firstMomentOfToday: 2013-12-05T00:00:00.000-08:00

En Java 8 también se puede usar ‘java.time.LocalDate.atStartOfDay()’:

    Date date = new Date();
    Instant inst = date.toInstant();
    LocalDate localDate = inst.atZone(ZoneId.systemDefault()).toLocalDate();
    Instant dayInst = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
    Date day = Date.from(dayInst);

valoraciones y reseñas

Si te apasiona la informática, eres capaz de dejar un tutorial acerca de qué le añadirías a esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *