Najlepszą rzeczą do zrobienia byłoby użycie jednego z the two common Time Zone databases.
Okazuje się jednak, że (według this question) trudno jest korzystać z bazy danych Microsoft SQL Server z TimeZone ponieważ klasa TimeZoneInfo
jest oznaczony atrybutem [HostProtection]
z MayLeakOnAbort
ustawiony prawda.
Uważam, że możliwym rozwiązaniem byłoby użycie klas NodaTime. Powinny one być dostępne z SQL CLR i zapewniać dostęp do baz danych , zarówno.
Wypróbuję to i zaktualizuję tutaj po zakończeniu.
UPDATE
Po walce z ograniczeniami bezpieczeństwa SQL CLR, mam do wniosku, że to podejście nie jest aktualnie możliwe albo.
Moje bieżące zalecenie byłoby robić konwersje strefy czasowej poza bazą danych, w logice aplikacji.
odnoszą duplikat (brak odpowiedzi): http://stackoverflow.com/questions/6781121/determine-if-daylight-saving-time-is- active-sql-server. Krótka odpowiedź brzmi, że nic nie jest wbudowane. Windows przetwarza DST za pomocą "tabel wyszukiwania" przechowywanych w rejestrze, które zwykle nie są dostępne z poziomu T-SQL. – RichardTheKiwi
@RichardTheKiwi - dane z rejestru to baza danych Microsoft Time Zone [patrz tutaj] (http://stackoverflow.com/tags/timezone/info) i jest dostępna przez klasę .Net 'TimeZoneInfo', która może być używany w SQL Server za pośrednictwem wywołań SQL CLR. Wkrótce opublikuję odpowiedź z próbką kodu. –
@RichardTheKiwi - Myślę, że to nie jest tak proste, jak myślałem. Jest to poprawne źródło danych, ale są pewne problemy. Zobacz http: // stackoverflow.com/q/614600/634824 –