2009-09-04 13 views
14

Uruchamiamy się w naszym kodzie Java z GregorianCalendar. Chcielibyśmy utrzymać je w naszej bazie danych postgresql jako czas GMT +0 w kolumnach typu znacznika czasu, ale nie jesteśmy pewni, jak to zrobić. Czy pola powinny być opatrzone znacznikiem czasu czy bez? Na podobnym żetonie, który "aktualny" czas funkcji postgres powinniśmy używać: current_timestamp or localtimestamp?Jak korzystać z czasów GMT w postgresql?

+0

nie związanych bezpośrednio do Twojego pytania, ale po prostu chciał pokazać, http://joda-time.sourceforge.net/ czas joda jest nieco łatwiejszy w obsłudze. :) http://joda-time.sourceforge.net/userguide.html#TimeZones –

+0

Dzięki, niestety niezwykle trudno jest dodać biblioteki do naszego projektu. – Adam

Odpowiedz

32

Zacznij tutaj - rozdział 8.5.3. "Time Zones" z dokumentacji.

Różnica CURRENT_TIMESTAMP i LOCALTIMESTAMP jest typu wyniku - były zwraca „znacznik czasu strefy czasowej”, a drugi - „znacznik czasu”:

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) 

To kolejne zależy jedynie od tego czasu strefa, w której chcesz zobaczyć bieżący czas. W takim przypadku ważna jest domyślna strefa czasowa (która może być ustawiona na kilka sposobów, wszystkie opisane w sekcji połączonej powyżej). Również można użyć "AT TIME ZONE" w zapytaniu aby uzyskać aktualny czas w strefie określonym czasie bez „błahy” z „czasowej” Otoczenie:

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

Dzięki, po przejrzeniu strony, teraz rozumiem różnicę pól z lub bez znacznika czasu, a my będziemy bez. Jednak, gdy używamy zarówno localtimestamp, jak i current_timestamp, otrzymujemy czas lokalny, a nie GMT – Adam

Powiązane problemy