2009-05-06 10 views
7

Lo que necesito hacer es:Java/Servlet: get current sql.Date

1) Obtener la configuración regional del usuario de la solicitud.

2) Crear nuevo objeto sql.Date con fecha y hora actual, basándose en la configuración regional del usuario

3) en base de datos MySQL, tipo de columna: TIMESTAMP

Lo que tengo es:

java.util.Locale locale = request.getLocale(); 

java.text.DateFormat dateFormat = 
java.text.DateFormat.getDateTimeInstance(
         java.text.DateFormat.LONG, java.text.DateFormat.LONG, locale); 

java.util.Date date = new java.util.Date(); 

java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 

La fecha está bien, pero tiene un problema con el tiempo, siempre a las 12:00:00 a.m.

¿Alguna sugerencia? ¿Hay una manera más eficiente de hacer esto?

Respuesta

4

Si desea la hora, necesita una java.sql.Timestamp no una java.sql.Date y una columna de marca de tiempo en la base de datos.

+0

Exactamente. Gracias por una pista! – Artemij

+0

Gracias. Esto es lo que estaba buscando :) –

0

Tenga en cuenta que request.getLocale utiliza el valor del encabezado Aceptar idioma y no siempre le puede dar la configuración regional correcta.

+0

Lo tendré en cuenta. Gracias. – Artemij

0

Obteniendo la zona horaria según la configuración regional puede no ser su zona horaria real.

Un ejemplo: aquí en Australia, la configuración regional es 'en-AU', pero tenemos algunas zonas horarias con hasta 3 horas de diferencia.

Supongo que en los Estados Unidos tienen este problema también.

Una posible solución es almacenar hora UTC en su lugar. Si el usuario luego ajusta su zona horaria en, digamos, sus preferencias, o utiliza algún otro método para pasar la zona horaria (la información del cliente/navegador dice a través de AJAX), entonces puede ajustar la hora UTC basándose en eso usando una instancia java.util.Calendar.

+0

Gracias por esa nota importante. ¿Puedes sugerir un ejemplo de solución elegante? – Artemij

9

Hay una solución más simple para ello. uso de este código para obtener la fecha actual utilizando java.util.Date

java.util.Calendar cal = java.util.Calendar.getInstance(); 
java.util.Date utilDate = cal.getTime(); 
java.sql.Date sqlDate = new Date(utilDate.getTime()); 
+1

Una solución más compacta es: 'java.util.Calendar cal = java.util.Calendar.getInstance();' 'java.sql.Date timeNow = new Date (cal.getTimeInMillis());' – Ryan

17

Incluso una solución más compacta;)

java.sql.Date timeNow = new Date(Calendar.getInstance().getTimeInMillis());