¿Cómo obtener la marca de tiempo actual en formato de cadena en Java? “aaaa.MM.dd.HH.mm.ss”

5 minutos de lectura

avatar de usuario
usuario3388884

¿Cómo obtener la marca de tiempo en formato de cadena en Java? “aaaa.MM.dd.HH.mm.ss”

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());

Esto es lo que tengo, pero Timestamp() requiere parámetros…

  • PreparedStatement.setTimestamp(1, nueva marca de tiempo(System.currentTimeMillis()));

    – Rajat

    12 de diciembre de 2018 a las 5:41


  • ¿Qué error estás recibiendo?

    – Roberto Colombia

    24 de diciembre de 2018 a las 16:39

  • FYI, las viejas clases de fecha y hora terriblemente problemáticas como SimpleDateFormat y java.sql.Timestamp son ahora legadosuplantado por el java.tiempo Clases integradas en Java 8 y versiones posteriores. Ver Tutorial por Oracle.

    – Basil Bourque

    24 de diciembre de 2018 a las 20:01


avatar de usuario
jmj

Reemplazar

new Timestamp();

con

new java.util.Date()

porque no hay un constructor predeterminado para Timestampo puedes hacerlo con el método:

new Timestamp(System.currentTimeMillis());

  • FYI, las viejas clases de fecha y hora terriblemente problemáticas como java.util.Date y java.sql.Timestamp son ahora legadosuplantado por el java.tiempo Clases integradas en Java 8 y versiones posteriores. Ver Tutorial por Oracle.

    – Basil Bourque

    24 de diciembre de 2018 a las 20:01

  • Solía: new Date().getTime();

    – aqteifan

    11 de noviembre de 2021 a las 19:18


avatar de usuario
dimonio

Usar java.util.Date clase en lugar de marca de tiempo.

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date());

Esto le dará la fecha actual en el formato especificado.

  • Esto me ayudó e hice algunos cambios para no tener que importar new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())

    – Pini Cheyni

    20 de diciembre de 2015 a las 12:47


  • Mejor new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date());

    – Zona

    25 de julio de 2017 a las 5:55


  • Esta es una respuesta muy útil. Gracias.

    – Arefe

    16 de marzo de 2021 a las 11:39

  • SimpleDadeFormat no es seguro para subprocesos, asegúrese de no usarlo en un entorno de subprocesos múltiples. Una vez pasé por alto esto y estaba dando resultados impredecibles cuando se compararon dos fechas.

    – Slavomir

    21 de abril de 2021 a las 5:25

avatar de usuario
albahaca bourque

tl; dr

Utilice sólo moderno java.tiempo clases Nunca use las terribles clases heredadas como SimpleDateFormat, Dateo java.sql.Timestamp.

ZonedDateTime                    // Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone).
.now(                            // Capture the current moment.
    ZoneId.of( "Africa/Tunis" )  // Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST. 
)                                // Returns a `ZonedDateTime` object. 
.format(                         // Generate a `String` object containing text representing the value of our date-time object. 
    DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" )
)                                // Returns a `String`. 

O usa el JVMLa zona horaria predeterminada actual de .

ZonedDateTime
.now( ZoneId.systemDefault() )
.format( DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" ) )

java.tiempo y JDBC 4.2

El enfoque moderno utiliza la java.tiempo clases como se ve arriba.

Si tu controlador JDBC cumple con JDBC 4.2puedes intercambiar directamente java.tiempo objetos con la base de datos. Usar PreparedStatement::setObject y ResultSet::getObject.

Use java.sql solo para controladores anteriores a JDBC 4.2

Si su controlador JDBC aún no cumple con JDBC 4.2 para soporte de java.tiempo tipos, debe volver a utilizar las clases java.sql.

Almacenamiento de datos.

OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;  // Capture the current moment in UTC.
myPreparedStatement.setObject( … , odt ) ;

Recuperando datos.

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

Los tipos java.sql, como java.sql.Timestamp, solo debe usarse para la transferencia dentro y fuera de la base de datos. Convierta inmediatamente a tipos java.time en Java 8 y versiones posteriores.

java.time.Instant

A java.sql.Timestamp mapas a un java.time.Instant, un momento en la línea de tiempo en UTC. Observe el nuevo método de conversión toInstant añadido a la clase anterior.

java.sql.Timestamp ts = myResultSet.getTimestamp( … );
Instant instant = ts.toInstant(); 

Zona horaria

Aplicar la zona horaria deseada/esperada (ZoneId) conseguir un ZonedDateTime.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Cadenas formateadas

Utilizar una DateTimeFormatter para generar su cadena. Los códigos de patrón son similares a los de java.text.SimpleDateFormat pero no exactamente, así que lea el documento cuidadosamente.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );

Este formato particular es ambiguo en cuanto a su significado exacto ya que carece de cualquier indicación de compensación de UTC o zona horaria.

ISO 8601

Si tiene algo que decir al respecto, le sugiero que considere usar estándares ISO 8601 formatos en lugar de rodar los tuyos. El formato estándar es bastante similar al suyo. Por ejemplo:
2016-02-20T03:26:32+05:30.

Las clases java.time utilizan estos formatos estándar de forma predeterminada, por lo que no es necesario especificar un patrón. los ZonedDateTime class amplía el formato estándar agregando el nombre de la zona horaria (una mejora inteligente).

String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]

Convertir a java.sql

Puede convertir de java.time de nuevo a java.sql.Timestamp. Extraer un Instant desde el ZonedDateTime.

Se han agregado nuevos métodos a las clases antiguas para facilitar la conversión a/desde clases java.time.

java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );

Tabla de tipos de fecha y hora en Java (tanto heredado como moderno) y en SQL estándar


Sobre java.tiempo

los java.tiempo framework está integrado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas legado clases de fecha y hora como java.util.Date, Calendar& SimpleDateFormat.

los Joda-Tiempo proyecto, ahora en modo de mantenimientoaconseja la migración a la java.tiempo clases

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

puedes intercambiar java.tiempo objetos directamente con su base de datos. Utilizar una controlador JDBC conforme con JDBC 4.2 o después. No hay necesidad de cuerdas, no hay necesidad de java.sql.* clases

¿Dónde obtener las clases java.time?

  • Java SE 8, Java SE 9, Java SE 10, Java SE 11y posteriores: 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
  • La mayoría de java.tiempo la funcionalidad está adaptada a Java 6 y 7 en ThreeTen-Backport.
  • Androide
  • Versiones posteriores de implementaciones de paquetes de Android del java.tiempo clases
  • Para Android anterior (<26), el TresDiezABP el proyecto se adapta ThreeTen-Backport (mencionado anteriormente). 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.

  • Entonces, ¿cuál es la forma correcta de obtener la marca de tiempo actual del reloj de pared en formato “yyyy.MM.dd.HH.mm.ss”? ¿Sin especificar explícitamente una cadena codificada de mi zona horaria local? Eso es lo que preguntaba el iniciador de tema, y ​​no pude encontrarlo en su respuesta …

    – t7ko

    10 de enero de 2020 a las 5:35

  • @t7ko Agregué una línea de código de ejemplo al tl; dr sección que muestra cómo solicitar explícitamente la zona horaria predeterminada actual de la JVM. Llamar a `now()’ sin ningún argumento hace lo mismo, pero no está claro si pretendía usar el valor predeterminado o si ignoraba o olvidaba el tema crucial de la zona horaria.

    – Basil Bourque

    10 de enero de 2020 a las 7:17

Puede utilizar java.util.Date en lugar de Timestamp:

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

Usar moderno java.time clases si usa Java 8 o posterior.

String s = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());

La respuesta de Basil Bourque es bastante buena. Pero es demasiado largo. Mucha gente no tendría paciencia para leerlo. Las 3 respuestas principales son demasiado antiguas y pueden inducir a error a Java new bee. Por lo tanto, proporciono esta respuesta breve y moderna para los nuevos desarrolladores que se avecinan. Espero que esta respuesta pueda reducir el uso de terrible SimpleDateFormat.

avatar de usuario
la mitad

Puedes usar lo siguiente:

new java.sql.Timestamp(System.currentTimeMillis()).getTime()

Resultado:

1539594988651

Un enfoque más apropiado es especificar una región Locale como parámetro en el constructor. El siguiente ejemplo utiliza una región local de EE. UU. El formato de fecha es sensible a la configuración regional y utiliza la configuración regional para adaptar la información relativa a las costumbres y convenciones de la región del usuario. Configuración regional (Java Platform SE 7)

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());

  • No hay tal cosa como “Zona local”. sospecho que estas confundido Locale y la zona horaria que no están relacionados. Locale controla las normas culturales para el formato y el lenguaje humano utilizado para el nombre del mes/día. La zona horaria ajusta la representación de la fecha y la hora para que sea adecuada para algunas regiones. hora del reloj de pared. En el caso de esta pregunta, la configuración regional es irrelevante ya que no hay problemas de formato con los que aplicar normas culturales ni hay nombres de mes/día para localizar a ningún idioma humano en particular.

    – Basil Bourque

    20 de febrero de 2016 a las 7:35


  • @BasilBourque Gracias por su aporte. He actualizado la respuesta para ser más explícito.

    – usuario3144836

    23 de febrero de 2016 a las 2:02

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad