2009-09-04 13 views
14

Stiamo correndo nel nostro codice java con GregorianCalendar. Ci piacerebbe persistere nel nostro database postgresql come GMT +0 in colonne di tipo timestamp, ma non siamo sicuri su come procedere. I campi dovrebbero essere con data e ora o senza? Con un simile token che la funzione "attuale" postgres dovrebbe utilizzare current_timestamp or localtimestamp?Come utilizzare le ore GMT in postgresql?

+0

non direttamente correlate alla tua domanda, ma volevo solo visualizzare http://joda-time.sourceforge.net/ joda time è un po 'più facile da gestire. :) http://joda-time.sourceforge.net/userguide.html#TimeZones –

+0

Grazie, purtroppo è estremamente difficile aggiungere librerie al nostro progetto. – Adam

risposta

32

Inizia qui - sezione 8.5.3. "Time Zones" dalla documentazione.

La differenza tra CURRENT_TIMESTAMP e LOCALTIMESTAMP è il tipo del risultato - gli ex restituisce "timestamp con fuso orario" e il secondo - "timestamp":

milen=> select CURRENT_TIMESTAMP; 
       now 
------------------------------- 
2009-09-05 01:21:37.595704+03 
(1 row) 

milen=> select LOCALTIMESTAMP; 
     timestamp 
---------------------------- 
2009-09-05 01:21:41.956355 
(1 row) 

E 'tutta un'altra cosa in quel momento zona che vuoi vedere l'ora corrente. In questo caso il fuso orario predefinito (che potrebbe essere impostato in diversi modi, tutti descritti nella sezione collegata sopra) è importante. Inoltre è possibile utilizzare "AT TIME ZONE" in una query per ottenere il tempo corrente in un momento determinato orario senza "giocherellare" con l'impostazione "fuso orario":

milen=> select CURRENT_TIMESTAMP AT TIME ZONE 'UTC'; 
      timezone 
---------------------------- 
2009-09-04 22:21:44.418236 
(1 row) 
+0

Grazie, dopo aver esaminato la pagina, ora capisco la differenza tra i campi con o senza timestamp, e saremo senza. Tuttavia, quando si utilizzano sia localtimestamp che current_timestamp, riceviamo ora locale, non GMT – Adam

Problemi correlati