readyStatement.setTimestamp (1, nueva marca de tiempo (System.currentTimeMillis ()));
Rajat
¿Qué error estás recibiendo?
Robert Columbia
Para su información, las antiguas clases de fecha y hora terriblemente problemáticas como SimpleDateFormaty java.sql.Timestampahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .
Basil Bourque
Respuestas:
202
Reemplazar
newTimestamp();
con
new java.util.Date()
porque no hay un constructor por defecto Timestamp, o puedes hacerlo con el método:
Para su información, las antiguas clases de fecha y hora terriblemente problemáticas como java.util.Datey java.sql.Timestampahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .
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
Mejor new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date());
Zon
36
tl; dr
Use solo clases modernas de java.time . Nunca utilice las clases heredadas terribles 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 utilice la zona horaria predeterminada actual de la JVM .
Los tipos java.sql, como por ejemplo java.sql.Timestamp, solo deben usarse para transferir dentro y fuera de la base de datos. Convierta inmediatamente a tipos java.time en Java 8 y posterior.
java.time.Instant
Un java.sql.Timestampmapa a un java.time.Instant, un momento en la línea de tiempo en UTC. Observe el nuevo método de conversión toInstantagregado a la clase anterior.
Usa a DateTimeFormatterpara generar tu cadena. Los códigos de patrón son similares a los de java.text.SimpleDateFormatpero no exactamente, así que lea el documento detenidamente.
Este formato particular es ambiguo en cuanto a su significado exacto, ya que carece de cualquier indicación de desplazamiento de UTC o zona horaria.
ISO 8601
Si tiene algo que decir al respecto, le sugiero que considere usar formatos estándar ISO 8601 en lugar de usar el suyo. El formato estándar es bastante similar al tuyo. Por ejemplo: 2016-02-20T03:26:32+05:30.
Las clases java.time usan estos formatos estándar de forma predeterminada, por lo que no es necesario especificar un patrón. La ZonedDateTimeclase amplía el formato estándar agregando el nombre de la zona horaria (una mejora inteligente).
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 .
Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, no hay necesidad de java.sql.*clases.
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter, y más .
Entonces, ¿cuál es la forma correcta de obtener la marca de tiempo actual del reloj de pared en formato "aaaa.MM.dd.HH.mm.ss"? ¿Sin especificar explícitamente la cadena codificada de mi zona horaria local? Eso es lo que preguntaba el iniciador del tema, y no pude encontrarlo en su respuesta ...
t7ko
@ t7ko Agregué una línea de código de ejemplo a la sección tl; dr 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 utilizar el valor predeterminado o si ignoraba u olvidaba el tema crucial de la zona horaria.
Basil Bourque
32
Puede utilizar java.util.Date en lugar de Timestamp:
Un enfoque más apropiado es especificar una región Locale como parámetro en el constructor. El siguiente ejemplo utiliza una región de la configuración regional 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 regional del usuario (Java Platform SE 7)
No existe tal cosa como "Zona Locale". Sospecho que eres confuso Localey zona horaria que no están relacionados. Localecontrola las normas culturales para formatear y el lenguaje humano utilizado para el nombre del mes / día. La zona horaria ajusta la representación de fecha y hora para que sea apropiada para la hora del reloj de pared de alguna región . En el caso de esta pregunta, la configuración regional es irrelevante ya que no hay problemas de formato con los que aplicar las normas culturales ni hay nombres de mes / día para localizar a un idioma humano en particular.
Basil Bourque
@BasilBourque Gracias por su aporte. He actualizado la respuesta para que sea más explícita
user3144836
4
Puedes usar lo siguiente
new java.sql.Timestamp(System.currentTimeMillis()).getTime()Result:1539594988651
Espero que esto ayude. Solo mi sugerencia y no por puntos de recompensa.
No tiene el formato de cadena solicitado. También me temo que lo único que agrega a un par de respuestas similares es una complicación innecesaria ...
Ole VV
4
Use java.timeclases modernas si usa Java 8 o más reciente.
String s =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
La respuesta de Basil Bourque es bastante buena. Pero es muy largo. Muchas personas no tendrían paciencia para leerlo. Las 3 respuestas principales son demasiado antiguas y pueden confundir a la nueva abeja de Java. Así que proporciono esta respuesta breve y moderna para los nuevos desarrolladores que vienen. Espero que esta respuesta pueda reducir el uso de terribles SimpleDateFormat.
SimpleDateFormat
yjava.sql.Timestamp
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .Respuestas:
Reemplazar
con
porque no hay un constructor por defecto
Timestamp
, o puedes hacerlo con el método:fuente
java.util.Date
yjava.sql.Timestamp
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .Use
java.util.Date
class en lugar de Timestamp.Esto le dará la fecha actual en el formato especificado.
fuente
new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date())
;tl; dr
Use solo clases modernas de java.time . Nunca utilice las clases heredadas terribles como
SimpleDateFormat
,Date
ojava.sql.Timestamp
.O utilice la zona horaria predeterminada actual de la JVM .
java.time y JDBC 4.2
El enfoque moderno utiliza las clases java.time como se ve arriba.
Si su controlador JDBC cumple con JDBC 4.2 , puede intercambiar directamente objetos java.time con la base de datos. Uso
PreparedStatement::setObject
yResultSet::getObject
.Utilice java.sql solo para controladores anteriores a JDBC 4.2
Si su controlador JDBC aún no cumple con JDBC 4.2 para el soporte de los tipos java.time , debe recurrir al uso de las clases java.sql.
Almacenamiento de datos.
Recuperando datos.
Los tipos java.sql, como por ejemplo
java.sql.Timestamp
, solo deben usarse para transferir dentro y fuera de la base de datos. Convierta inmediatamente a tipos java.time en Java 8 y posterior.java.time.Instant
Un
java.sql.Timestamp
mapa a unjava.time.Instant
, un momento en la línea de tiempo en UTC. Observe el nuevo método de conversióntoInstant
agregado a la clase anterior.Zona horaria
Aplique la zona horaria deseada / esperada (
ZoneId
) para obtener aZonedDateTime
.Cadenas formateadas
Usa a
DateTimeFormatter
para generar tu cadena. Los códigos de patrón son similares a los dejava.text.SimpleDateFormat
pero no exactamente, así que lea el documento detenidamente.Este formato particular es ambiguo en cuanto a su significado exacto, ya que carece de cualquier indicación de desplazamiento de UTC o zona horaria.
ISO 8601
Si tiene algo que decir al respecto, le sugiero que considere usar formatos estándar ISO 8601 en lugar de usar el suyo. El formato estándar es bastante similar al tuyo. Por ejemplo:
2016-02-20T03:26:32+05:30
.Las clases java.time usan estos formatos estándar de forma predeterminada, por lo que no es necesario especificar un patrón. La
ZonedDateTime
clase amplía el formato estándar agregando el nombre de la zona horaria (una mejora inteligente).Convierte a java.sql
Puede convertir de java.time a
java.sql.Timestamp
. Extraer unInstant
de laZonedDateTime
.Se han agregado nuevos métodos a las clases antiguas para facilitar la conversión a / desde las clases java.time.
Sobre java.time
El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como
java.util.Date
,Calendar
, ySimpleDateFormat
.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 .
Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, no hay necesidad de
java.sql.*
clases.¿Dónde obtener las clases java.time?
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como
Interval
,YearWeek
,YearQuarter
, y más .fuente
Puede utilizar java.util.Date en lugar de Timestamp:
fuente
Un enfoque más apropiado es especificar una región Locale como parámetro en el constructor. El siguiente ejemplo utiliza una región de la configuración regional 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 regional del usuario (Java Platform SE 7)
fuente
Locale
y zona horaria que no están relacionados.Locale
controla las normas culturales para formatear y el lenguaje humano utilizado para el nombre del mes / día. La zona horaria ajusta la representación de fecha y hora para que sea apropiada para la hora del reloj de pared de alguna región . En el caso de esta pregunta, la configuración regional es irrelevante ya que no hay problemas de formato con los que aplicar las normas culturales ni hay nombres de mes / día para localizar a un idioma humano en particular.Puedes usar lo siguiente
Espero que esto ayude. Solo mi sugerencia y no por puntos de recompensa.
fuente
Use
java.time
clases modernas si usa Java 8 o más reciente.La respuesta de Basil Bourque es bastante buena. Pero es muy largo. Muchas personas no tendrían paciencia para leerlo. Las 3 respuestas principales son demasiado antiguas y pueden confundir a la nueva abeja de Java. Así que proporciono esta respuesta breve y moderna para los nuevos desarrolladores que vienen. Espero que esta respuesta pueda reducir el uso de terribles
SimpleDateFormat
.fuente