"+ hh: mm" i "-hh: mm" nie są strefami czasowymi, są to przesunięcia UTC. Dobry format do zapisania są jako liczba całkowita ze znakiem z przesunięciem w minutach. Możesz także użyć rzeczy takich jak interval
, ale to tylko ci pomoże, jeśli chcesz wykonywać obliczenia daty bezpośrednio w PostgreSQL, jak w zapytaniu, itp. Zwykle, jeśli robisz te obliczenia w innym języku, a potem to zależy od tego języka, jeśli dobrze obsługuje typ typu interval
i ma dobrą bibliotekę daty/czasu lub nie. Ale konwersja liczby całkowitej na rodzaj typu podobnego do interval
powinna być trywialna, więc osobiście po prostu zapisałbym ją jako liczbę całkowitą.
Strefy czasowe mają nazwy i chociaż nie ma znormalizowanych nazw stref czasowych, w bazie danych "tz" lub "zoneinfo" znajduje się jeden de facto standard, a nazwy takie jak "Europa/Paryż", "Ameryka/New_York "lub" US/Pacific ". Te powinny być przechowywane jako ciągi.
System Windows używa zupełnie innych nazw, np. "Czas na romans" (nie pytaj). Możesz przechowywać je tak samo jak napisy, ale uniknęłbym ich, nazwy te nie są używane poza Windows, a nazwy nie mają sensu.Poza tym przetłumaczone wersje okien mają tendencję do używania przetłumaczonych nazw dla tych stref czasowych, co czyni je jeszcze gorszymi.
Skróty takie jak "PDT" i "EST" nie nadają się do użytku jako nazwy stref czasowych, ponieważ nie są unikalne. Istnieją cztery (jak sądzę, czy może pięć?) Różne strefy czasowe, wszystkie nazywane "CST", więc nie można ich użyć.
W skrócie: w przypadku stref czasowych należy zapisać nazwę jako ciąg. W przypadku przesunięć UTC przechowaj przesunięcie w minutach jako liczbę całkowitą ze znakiem.
Czy istnieje link do kanonicznych ciągów tekstowych (Australia/Sydney) dla wszystkich stref czasowych? – odigity
Tak: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones – odigity
Jeśli chcesz zoptymalizować wydajność + oszczędność miejsca (i zmniejszyć przenośność/elastyczność), baza danych tz + enum byłaby dobra –