La cosa migliore da fare sarebbe utilizzare uno di the two common Time Zone databases.
Tuttavia, sembra che (secondo this question) è difficile da utilizzare il database di Microsoft TimeZone da SQL Server perché la classe TimeZoneInfo
è contrassegnato con un attributo [HostProtection]
con MayLeakOnAbort
set vero.
Credo che una soluzione possibile sarebbe utilizzare invece le classi NodaTime. Questi dovrebbero essere accessibili da SQL CLR e fornire l'accesso a entrambi i database.
Ci proverò e aggiornerò qui quando completo.
UPDATE
Dopo aver combattuto con restrizioni di sicurezza di SQL CLR, ho concluso che questo è l'approccio non è attualmente possibile sia.
mia raccomandazione attuale sarebbe quello di fare conversioni di fuso orario al di fuori del database, nella vostra logica dell'applicazione.
fonte
2013-04-26 16:34:02
riferiscono duplicato (nessuna risposta): http://stackoverflow.com/questions/6781121/determine-if-daylight-saving-time-is- active-sql-server. La risposta breve è che non c'è nulla di integrato. Windows elabora l'ora legale utilizzando "tabelle di ricerca" memorizzate nel registro che non sono normalmente accessibili da T-SQL. – RichardTheKiwi
@RichardTheKiwi - Questo dato dal registro è il database del fuso orario Microsoft [Vedi qui] (http://stackoverflow.com/tags/timezone/info) ed è accessibile tramite la classe .Net 'TimeZoneInfo', che può essere utilizzato in SQL Server tramite le chiamate CLR SQL. Pubblicherò una risposta a breve con un esempio di codice. –
@RichardTheKiwi - Immagino che non sia così facile come pensavo. È la fonte corretta dei dati, ma ci sono alcuni problemi. Vedi http: // StackOverflow.com/q/614600/634824 –