Chcemy zacząć zbierać strefy czasowe dla każdego z naszych adresów w bazie danych. Jaka jest najlepsza praktyka do przechowywania stref czasowych? Jak zabrałbyś się do uzyskiwania stref czasowych dla istniejących rekordów adresów?
Korzystam z serwera Microsoft SQL, .net mvc, C #. Wszelkie sugestie będą mile widziane.
database
database-design
time
Rodney
źródło
źródło
Odpowiedzi:
Chcesz przechowywać coś, co nie zmienia się cały czas (lub dwa razy w roku). Baza danych stref czasowych https://en.wikipedia.org/wiki/List_of_tz_database_time_zones jest dokładnie właściwa. Więc przechowujesz tylko dwie litery.
Z tej bazy danych można zapytać o przesunięcie czasowe oraz kiedy aktywny jest czas letni. To nie tylko przesunięcie czasowe, ale także obszar, więc wiele miejsc na tej samej szerokości geograficznej będzie miało różne kody i może indywidualnie zmieniać reguły stref czasowych, a twoje oprogramowanie będzie w stanie to obsłużyć.
Jedynym momentem, kiedy trzeba wprowadzić zmiany w bazie danych, jest zmiana lokalizacji, do której strefy czasowej należy, co byłoby bardzo rzadkie.
źródło
Absolutną najlepszą praktyką byłoby użycie bazy danych, która obsługuje
TIMESTAMP WITH TIMEZONE
typ danych zdefiniowany przez SQL99.SQL Server ma typ o nazwie,
datetimeoffset
który robi wszystko, coTIMESTAMP WITH TIMEZONE
może zrobić oprócz przechowywania rzeczywistej strefy czasowej. Wszystko, co możesz zrobić, to zapisać przesunięcie względem UTC (np.2013-05-04 12:34:56 -5:00
), Co oznacza, że będziesz musiał ustalić to przed przechowywaniem na podstawie strefy czasowej.źródło
Zakładając, że używasz .Net Framework 4.0 lub nowszego, TimeZoneInfo jest tym, czego potrzebujesz.
Przechowuj wszystkie wartości dat w bazie danych w formacie UTC. Użyj wartości ID lub wyniku ToSerializedString () dla każdego klienta, aby utworzyć obiekt TimeZoneInfo do konwersji przechowywanych dat na format lokalny w celu wyświetlenia.
źródło
Powiedziałeś, że chcesz zapisać strefę czasową dla każdego adresu w DB, ale nie powiedziałeś, co chcesz z tym zrobić. Przechowywanie czegoś w bazie danych rzadko jest celem samym w sobie.
W każdym razie chciałbym skorzystać z bazy danych TZ , czyli bazy danych Olsen, bezpośrednio lub przy użyciu gotowego oprogramowania integrującego TZ. Strefę czasową można zapisać po prostu jako ciąg znaków odnoszący się do jednego z wpisów TZ DB , np. „Afryka / Kampala” lub „Europa / Paryż”.
źródło