¿Cómo convierto 'timeStamp' a date
después de obtener el recuento en Java?
Mi código actual es el siguiente:
public class GetCurrentDateTime {
public int data() {
int count = 0;
java.sql.Timestamp timeStamp = new Timestamp(System.currentTimeMillis());
java.sql.Date date = new java.sql.Date(timeStamp.getTime());
System.out.println(date);
//count++;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/pro", "root", "");
PreparedStatement statement = con.prepareStatement("select * from orders where status='Q' AND date=CURDATE()");
ResultSet result = statement.executeQuery();
while (result.next()) {
// Do something with the row returned.
count++; //if the first col is a count.
}
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
return count;
}
}
Esta es mi base de datos:
Aquí el resultado que obtuve fue 2012-08-07 0, pero la consulta equivalente devuelve 3. ¿Por qué obtengo 0?
PreparedStatement
con sintaxis incorrecta. No puede incrustar variables de Java en el texto de su cadena SQL. En su lugar, incruste?
en la cadena SQL, luego llame a losset
métodos para pasar valores al PreparedStatement. Vea la respuesta correcta de Sujay y la respuesta de tenorsax .Respuestas:
Simplemente cree un nuevo
Date
objeto con elgetTime()
valor del sello como parámetro.Aquí hay un ejemplo (yo uso una marca de tiempo de ejemplo de la hora actual):
fuente
fuente
Sólo:
fuente
He estado buscando esto desde hace mucho tiempo, resulta que el convertidor Eposh lo hace fácilmente:
O al contrario:
fuente
tl; dr
...
...
...
java.time
Está utilizando clases de fecha y hora antiguas problemáticas que ahora son heredadas, suplantadas por el moderno java.time clases .
Aparentemente, está almacenando un momento en su base de datos en una columna de algún tipo entero. Eso es desafortunado. En su lugar, debería utilizar una columna de un tipo como el estándar SQL
TIMESTAMP WITH TIME ZONE
. Pero, para esta Respuesta, trabajaremos con lo que tenemos.Si sus registros representan momentos con una resolución de milisegundos y desea todos los registros de un día completo, entonces necesitamos un intervalo de tiempo. Debemos tener un momento de inicio y un momento de parada. Su consulta tiene un solo criterio de fecha y hora donde debería haber tenido un par.
los
LocalDate
clase representa un valor de solo fecha sin hora del día y sin zona horaria.Una zona horaria es crucial para determinar una fecha. Para un momento dado, la fecha varía en todo el mundo según la zona. Por ejemplo, unos minutos después de la medianoche en París, Francia es un nuevo día, mientras que todavía es “ayer” en Montreal, Québec .
Si no se especifica ninguna zona horaria, la JVM aplica implícitamente su zona horaria predeterminada actual. Ese valor predeterminado puede cambiar en cualquier momento, por lo que sus resultados pueden variar. Es mejor especificar la zona horaria deseada / esperada explícitamente como argumento.
Especificar un nombre de zona horaria correcta en el formato de
continent/region
, por ejemploAmerica/Montreal
,Africa/Casablanca
oPacific/Auckland
. Nunca use el 3-4 abreviatura de letras tales comoEST
oIST
, ya que son no verdaderas zonas de tiempo, no estandarizados, y ni siquiera único (!).Si desea utilizar la zona horaria predeterminada actual de la JVM, solicítela y páselo como argumento. Si se omite, el valor predeterminado actual de la JVM se aplica implícitamente. Es mejor ser explícito, ya que el valor predeterminado puede cambiarse en cualquier momento durante el tiempo de ejecución mediante cualquier código en cualquier hilo de cualquier aplicación dentro de la JVM.
O especifique una fecha. Puede establecer el mes con un número, con una numeración sensata del 1 al 12 para enero-diciembre.
O, mejor, use los
Month
objetos enum predefinidos, uno para cada mes del año. Consejo: utilice estosMonth
objetos en todo su código base en lugar de un simple número entero para hacer que su código sea más autodocumentado, garantizar valores válidos y proporcionar seguridad de tipos .Con un
LocalDate
en la mano, lo siguiente que tenemos que hacer es transformar eso en un par de momentos, el comienzo y el final del día. No asuma que el día comienza a las 00:00:00 hora del día. Debido a anomalías como el horario de verano (DST), el día puede comenzar a otra hora, como la 01:00:00. Así que deja que java.time determine el primer momento del día. Pasamos unZoneId
argumento aLocalDate::atStartOfDay
para buscar tales anomalías. El resultado es aZonedDateTime
.Generalmente, el mejor enfoque para definir un lapso de tiempo es el enfoque semiabierto, donde el principio es inclusivo mientras que el final es exclusivo . Entonces, un día comienza con su primer momento y se extiende hasta, pero sin incluir, el primer momento del día siguiente.
Nuestra consulta de un día entero no puede hacer uso del comando SQL
BETWEEN
. Ese comando es Completamente cerrado ([]
) (tanto el principio como el final son inclusivos) donde queremos Half-Open ([)
). Usamos un par de criterios>=
y<
.Tu columna está mal nombrada. Evite cualquiera de las mil palabras reservadas por diversas bases de datos. Usemos
placed
en este ejemplo.Su código debería haber utilizado
?
marcadores de posición para especificar nuestros momentos.Pero tenemos
ZonedDateTime
objetos en la mano, mientras que su base de datos aparentemente almacena enteros como se discutió anteriormente. Si hubiera definido su columna correctamente podríamos simplemente pasar losZonedDateTime
objetos con cualquier controlador JDBC de soporte de JDBC 4.2 o posterior.Pero, en cambio, necesitamos obtener un recuento desde la época en segundos completos. Asumiré que la fecha de referencia de su época es el primer momento de 1970 en UTC. Tenga cuidado con la posible pérdida de datos, ya que la
ZonedDateTime
clase tiene una resolución de nanosegundos. Cualquier fracción de segundo se truncará en las siguientes líneas.Ahora estamos listos para pasar esos números enteros a nuestro código SQL definido anteriormente.
Cuando recupera sus valores enteros del
ResultSet
, puede transformarlos enInstant
objetos (siempre en UTC) o enZonedDateTime
objetos (con una zona horaria asignada).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 java.time clases .
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?
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
En primer lugar, no está aprovechando la ventaja de utilizar un
PreparedStatement
. Primero le sugiero que modifique suPreparedStatement
como sigue:A continuación, puede utilizar
statement.setXX(param_index, param_value)
para establecer los valores respectivos. Para la conversión atimestamp
, eche un vistazo a los siguientes javadocs:Marca de tiempo de PreparedStatement.setTimeStamp ()
¡Espero que esto ayude!
fuente
En Android es muy simple. Simplemente use la clase Calender para obtener currentTimeMillis.
En Java, simplemente use System.currentTimeMillis () para obtener la marca de tiempo actual
fuente
No estoy seguro de lo que está intentando seleccionar en la consulta, pero tenga en cuenta que
UNIX_TIMESTAMP()
sin argumentos devuelve el tiempo ahora. Probablemente debería proporcionar un tiempo válido como argumento o cambiar la condición.EDITAR:
Aquí hay un ejemplo de una consulta con límite de tiempo basada en la pregunta:
EDITAR: columna de marca de tiempo
En caso de uso de marca de tiempo
java.sql.Timestamp
y PreparedStatement.setTimestamp () , es decir:fuente
new Date(timestamp.getTime())
debería funcionar, pero la nueva forma elegante de Java 8 (que puede ser más elegante y más segura para los tipos, además de ayudarlo a usar las nuevas clases de tiempo) es llamarDate.from(timestamp.toInstant())
.(No confíe en el hecho de que en
Timestamp
sí mismo es una instancia deDate
; vea la explicación en los comentarios de otra respuesta ).fuente
fuente
Me siento obligado a responder, ya que otras respuestas parecen ser independientes de la zona horaria, lo que una aplicación del mundo real no puede permitirse. Para hacer que la conversión de la marca de tiempo a la fecha sea correcta cuando la marca de tiempo y la JVM están usando diferentes zonas horarias, puede usar LocalDateTime de Joda Time (o LocalDateTime en Java8) de esta manera:
El siguiente ejemplo asume que la marca de tiempo es UTC (como suele ser el caso de las bases de datos). En caso de que sus marcas de tiempo estén en una zona horaria diferente, cambie el parámetro de zona horaria de la
toDate
declaración.fuente
intente usar este código java:
fuente
Suponiendo que tiene un preexistente
java.util.Date date
:fuente
Puede utilizar este método para obtener la fecha de la marca de tiempo y la zona horaria de un área en particular.
fuente
fuente
fuente