Saltar al contenido

Cómo eliminar milisegundos del formato de objeto de fecha en Java

Solución:

tl; dr

Corta la fracción de segundo.

myJavaUtilDate.toInstant()                         // Convert from legacy class to modern class. Returns a `Instant` object.
              .truncatedTo( ChronoUnit.SECONDS )   // Generate new `Instant` object based on the values of the original, but chopping off the fraction-of-second.

Ocultar la fracción de segundo, al generar una String.

myJavaUtilDate.toInstant()                         // Convert from legacy class to modern class. Returns a `Instant` object.
              .atOffset( ZoneOffset.UTC )          // Return a `OffsetDateTime` object. 
              .format( DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ). // Ask the `OffsetDateTime` object to generate a `String` with text representing its value, in a format defined in the `DateTimeFormatter` object.

Evite las clases de fecha y hora heredadas

Está utilizando clases de fecha y hora antiguas problemáticas, ahora heredadas, suplantadas por las clases java.time.

Instant

Convierte tu viejo java.util.Date objetar a un java.time.Instant llamando al nuevo método agregado a la clase anterior.

Instant instant = myJavaUtilDate.toInstant() ;

Tabla de tipos de clases de fecha y hora en java.time moderno versus heredado.

Truncar

Si desea cambiar el valor de los datos en sí para reducir la fracción de segundo, puede truncar. Las clases java.time usan objetos inmutables, por lo que generamos un nuevo objeto en lugar de alterar (mutar) el original.

Instant instantTruncated = instant.truncatedTo( ChronoUnit.SECONDS );

Generando cadena

Si en lugar de truncar simplemente desea suprimir la visualización de las fracciones de segundo al generar una cadena que representa el valor de fecha y hora, defina un formateador que se adapte a sus necesidades.

Por ejemplo, “uuuu-MM-dd HH: mm: ss” no menciona una fracción de segundo, por lo que los milisegundos contenidos en los datos simplemente no aparecen en la cadena generada.

Convertir Instant a un OffsetDateTime para un formato más flexible.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC )
String output = odt.format( f );

Zona horaria

Tenga en cuenta que su pregunta ignora el problema de la zona horaria. Si tenía la intención de utilizar UTC, el código anterior funciona como Date y Instant están en UTC por definición. Si, en cambio, desea percibir los datos dados a través de la lente de la hora del reloj de pared de alguna región, aplique una zona horaria. Desbordamiento de la pila de búsqueda para ZoneId y ZonedDateTime nombres de clases para obtener mucha más información.


Sobre java.time

los java.time framework está integrado en Java 8 y versiones posteriores. Estas clases suplantan las antiguas y problemáticas clases de fecha y hora heredadas, como java.util.Date, CalendarY SimpleDateFormat.

los Joda-Time proyecto, 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.

Puedes intercambiar java.time objetos directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. Sin necesidad de cuerdas, sin necesidad de java.sql.* clases.

¿Dónde obtener las clases java.time?

  • Java SE 8, Java SE 9, Java SE 10, y después

    • Incorporado.
    • Parte de la API estándar de Java 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á retroportada a Java 6 y 7 en ThreeTen-Backport.
  • Androide

    • Versiones posteriores de implementaciones de paquetes de Android del java.time clases.
    • Para Android anterior (<26), el ThreeTenABP el proyecto se adapta ThreeTen-Backport (mencionado anteriormente). Ver Cómo usar ThreeTenABP….

los ThreeTen-Extra el 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, YearQuarter, y más.

La respuesta básica es que no puedes. El valor devuelto por Date#toString es una representación de la Date objeto y no lleva ningún concepto de formato que no sea el que utiliza internamente para el toString método.

Generalmente, esto no debe usarse para fines de exhibición (excepto en raras ocasiones)

En su lugar, debería utilizar algún tipo de DateFormat

Por ejemplo…

Date date = new Date();
System.out.println(date);
System.out.println(DateFormat.getDateTimeInstance().format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(date));

Producirá algo como …

Thu Jan 30 16:29:31 EST 2014
30/01/2014 4:29:31 PM
30/01/14 4:29 PM
30/01/2014 4:29:31 PM
30 January 2014 4:29:31 PM

Si se queda realmente atascado, puede personalizarlo aún más utilizando un SimpleDateFormat, pero evitaría esto si puede, ya que no todos usan el mismo formato de fecha / hora;)

Puedes usar SimpleDateFormatter. Consulte el siguiente código.

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
Date now = date.getTime();
System.out.println(formatter.format(now));
¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 1)



Utiliza Nuestro Buscador

Deja una respuesta

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