¿Cómo puedo crear una marca de tiempo con la fecha 23/09/2007?
100
Por Timestamp
, supongo que quieres decir java.sql.Timestamp
. Notarás que esta clase tiene un constructor que acepta un long
argumento. Puedes analizar esto usando la DateFormat
clase:
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);
java.util.Date
,java.util.Calendar
yjava.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y versiones posteriores. Consulte el tutorial de Oracle .¿Qué pasa con esto?
fuente
¿Qué quieres decir con la marca de tiempo? Si te refieres a milisegundos desde la época de Unix:
Si desea un objeto java.sql.Timestamp real:
fuente
Calendar.SEPTEMBER
tl; dr
java.time
Actualicemos esta página mostrando el código usando java.time marco integrado en Java 8 y posteriores.
Estas nuevas clases están inspiradas en Joda-Time , definida por JSR 310 y ampliada por ThreeTen-Extra proyecto . Sustituyen a las antiguas clases de fecha y hora notoriamente problemáticas incluidas con las primeras versiones de Java.
En java.time, an
Instant
es un momento en la línea de tiempo en UTC. AZonedDateTime
es un Instant ajustado a una zona horaria (ZoneId
).La zona horaria es crucial aquí. Una fecha de
September 23, 2007
no se puede traducir a un momento en la línea de tiempo sin aplicar una zona horaria. Considere que un nuevo día amanece antes en París que en Montreal, donde todavía es “ayer”.Además, un java.sql.Timestamp representa tanto una fecha como una hora del día. Por lo tanto, debemos inyectar una hora del día para que coincida con la fecha. Suponemos que desea que el primer momento del día sea la hora del día. Tenga en cuenta que este no es siempre el momento
00:00:00.0
debido al horario de verano y posiblemente a otras anomalías.Tenga en cuenta que, a diferencia de la antigua clase java.util.Date, y a diferencia de Joda-Time, los tipos java.time tienen una resolución de nanosegundos en lugar de milisegundos. Esto coincide con la resolución de java.sql.Timestamp.
Tenga en cuenta que java.sql.Timestamp tiene la mala costumbre de aplicar implícitamente la zona horaria predeterminada actual de su JVM a su valor de fecha y hora al generar una representación de cadena a través de su
toString
método. Aquí puede ver miAmerica/Los_Angeles
zona horaria aplicada. Por el contrario, las clases java.time son más sensatas, utilizando el estándar ISO 8601 formatos .Volcar a la consola.
Cuando se ejecuta.
Por cierto, a partir de JDBC 4.2, puede usar los tipos java.time directamente. No es necesario
java.sql.Timestamp
.PreparedStatement.setObject
ResultSet.getObject
Acerca de 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 se necesitan cuerdas, no se necesitan
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
También puede hacer lo siguiente:
fuente
Según la API, el constructor que aceptaría año, mes, etc. está obsoleto. En su lugar, debe usar el Constructor que acepta un archivo. Puede usar una implementación de Calendario para construir la fecha que desee y acceder a la representación de tiempo como un largo, por ejemplo, con el método getTimeInMillis .
fuente
En aras de la integridad, también una solución con Joda-Time versión 2.5 y su
DateTime
clase:fuente
DateTime
objeto. Eso significa que sus resultados variarán entre varias computadoras o la configuración del sistema operativo host o la configuración de JVM. Para obtener resultados predecibles, pase una zona horaria a eseDateTime
constructor. Elija el nombre de la zona horaria adecuada para su intención. Por ejemplo,DateTimeZone.forID( "America/Montreal" )
oDateTimeZone.UTC
.DateTime
objeto sus milisegundos desde la época. Reemplazar.toDate().getTime()
con.getMillis()
.DateTimeZone.getDefault()
y pasando el resultado como argumento opcional. (Por cierto, lo mismo ocurre con elLocale.getDefault()
mismo problema sobre la ambigüedad de los argumentos opcionales.)Una respuesta más general sería importar
java.util.Date
, luego, cuando necesite establecer untimestamp
igual a la fecha actual, simplemente configúrelo igual anew Date()
.fuente