2009-05-06 25 views
7

Quello che devo fare è:Java/servlet: get sql.Date attuale

1) Ottenere le impostazioni locali dell'utente dalla richiesta.

2) Creare nuovo oggetto sql.Date con la data e l'ora correnti, sulla base di impostazioni locali dell'utente

3) in db MySQL, tipo di colonna: TIMESTAMP

Quello che ho ottenuto è:

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()); 

Data è OK, ma ha un problema con il tempo - sempre 12:00:00 AM.

Qualche suggerimento? C'è un modo più efficiente per farlo?

risposta

4

Se si desidera l'ora, è necessario un java.sql.Timestamp non un java.sql.Date e una colonna timestamp nel database.

+0

Esattamente. Grazie per un suggerimento! – Artemij

+0

Grazie. Questo è quello che stavo cercando :) –

0

Nota che request.getLocale utilizza il valore dell'intestazione Accept-Language e potrebbe non fornire sempre le impostazioni internazionali corrette.

+0

Lo terrò a mente. Grazie. – Artemij

0

Il fuso orario in base all'impostazione internazionale potrebbe non essere il loro fuso orario effettivo.

Un esempio: qui in Australia, l'impostazione internazionale è "en-AU", ma abbiamo alcuni fusi orari con una differenza fino a 3 ore.

Immagino che negli Stati Uniti abbiano anche questo problema.

Una possibile soluzione è invece ora UTC. Se l'utente modifica il proprio fuso orario, ad esempio, le sue prefrenze, o si utilizza un altro metodo per passare il fuso orario (informazioni client/browser dire tramite AJAX), è possibile regolare l'ora UTC in base a tale utilizzando un'istanza java.util.Calendar.

+0

Grazie per questa importante nota. Puoi suggerire un esempio di soluzione elegante? – Artemij

9

C'è una soluzione più semplice per questo. uso questo codice per ottenere la data corrente utilizzando 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 soluzione più compatta è: 'java.util.Calendar cal = java.util.Calendar.getInstance();' 'java.sql.Date timeNow = new Date (cal.getTimeInMillis());' – Ryan

17

Ancora una soluzione più compatta;)

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