Am besten verwenden Sie einen der the two common Time Zone databases.
Es scheint jedoch, dass (nach this question) es schwierig ist, die Microsoft Time-Zone-Datenbank von SQL Server zu verwenden, da die TimeZoneInfo
-Klasse mit einem [HostProtection]
Attribute mit MayLeakOnAbort
gesetzt wahr markiert.
Ich glaube, eine mögliche Lösung wäre NodaTime Klassen stattdessen zu verwenden. Diese sollten von SQL CLR aus zugänglich sein und Zugriff auf beide Datenbanken bieten.
Ich werde dies ausprobieren und hier aktualisieren, wenn Sie fertig sind.
UPDATE
Nachdem sie mit Sicherheitseinschränkungen von SQL CLR kämpfen, habe ich festgestellt, dass dieser Ansatz entweder derzeit nicht möglich ist.
Meine aktuelle Empfehlung wäre Zeitzone Konvertierungen außerhalb der Datenbank, in Ihrer Anwendungslogik.
Duplikat beziehen (keine Antwort): http://stackoverflow.com/questions/6781121/determine-if-daylight-saving-time-is- Aktiv-SQL-Server. Die kurze Antwort ist, dass nichts eingebaut ist. Windows verarbeitet DST mit "Nachschlagetabellen", die in der Registrierung gespeichert sind, auf die normalerweise von T-SQL aus nicht zugegriffen werden kann. – RichardTheKiwi
@RichardTheKiwi - Diese Daten aus der Registrierung ist die Microsoft Time Zone-Datenbank [Siehe hier] (http://stackoverflow.com/tags/timezone/info), und ist über die .NET-Klasse "TimeZoneInfo" zugänglich Wird in SQL Server über SQL CLR-Aufrufe verwendet. Ich werde in Kürze eine Antwort mit einem Codebeispiel posten. –
@RichardTheKiwi - Ich denke, das ist nicht so einfach wie ich dachte. Es ist die richtige Quelle der Daten, aber es gibt einige Probleme. Siehe http: // stackoverflow.com/q/614600/634824 –