Điều tốt nhất cần làm là sử dụng một trong số the two common Time Zone databases.
Tuy nhiên, có vẻ như (theo this question) rất khó để sử dụng cơ sở dữ liệu TimeZone của Microsoft từ SQL Server vì lớp TimeZoneInfo
được đánh dấu bằng thuộc tính [HostProtection]
với MayLeakOnAbort
đặt đúng.
Tôi tin rằng một giải pháp có thể là sử dụng các lớp NodaTime thay thế. Chúng có thể truy cập được từ SQL CLR và cung cấp quyền truy cập vào cả cơ sở dữ liệu.
Tôi sẽ dùng thử và cập nhật tại đây khi hoàn tất.
CẬP NHẬT
Sau khi chiến đấu với những hạn chế an ninh của SQL CLR, tôi đã kết luận rằng đây là cách tiếp cận hiện không thể một trong hai.
Đề xuất hiện tại của tôi là chuyển đổi múi giờ bên ngoài cơ sở dữ liệu, trong logic ứng dụng của bạn.
Nguồn
2013-04-26 16:34:02
tham khảo trùng lặp (không trả lời): http://stackoverflow.com/questions/6781121/determine-if-daylight-saving-time-is- active-sql-server. Windows xử lý DST bằng cách sử dụng "bảng tra cứu" được lưu trữ trong sổ đăng ký mà thường không thể truy cập được từ T-SQL. – RichardTheKiwi
@RichardTheKiwi - Dữ liệu này từ sổ đăng ký là cơ sở dữ liệu múi giờ của Microsoft [Xem tại đây] (http://stackoverflow.com/tags/timezone/info) và có thể truy cập thông qua lớp .Net 'TimeZoneInfo', có thể được sử dụng trong SQL Server thông qua các cuộc gọi CLR SQL. Tôi sẽ gửi một câu trả lời ngay với một mẫu mã. –
@RichardTheKiwi - Tôi đoán điều này không dễ như tôi nghĩ. Đây là nguồn dữ liệu chính xác, nhưng có một số vấn đề. Xem http: // stackoverflow.com/q/614600/634824 –