2008-10-12 45 views
5

Tôi muốn lưu trữ giá trị C# DateTimeOffset trong cơ sở dữ liệu SQL Server 2005.Lưu trữ giá trị C# DateTimeOffset trong cơ sở dữ liệu SQL Server 2005

Sql 2008 có kiểu này như là một kiểu được xây dựng sẵn, nhưng SQL Server 2005 thì không.

Cấu trúc DateTimeOffset có giá trị DateTime mà tôi lưu trữ dưới dạng DateTime, một thuộc tính Bù đắp (thuộc loại TimeSpan). Vì đây là múi giờ tương đối so với UTC, có lẽ đó là thời gian sử dụng toàn bộ số giờ hoặc nửa giờ.

Gợi ý về cách tốt nhất để lưu trữ điều này trong cơ sở dữ liệu SQL Server 2005?

+0

Câu hỏi liên quan - http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – Oded

Trả lời

7

Nó không phải là một ý tưởng tốt để giả định rằng một offset là một số giờ hoặc nửa giờ - chắc chắn có múi giờ tứ giờ xung quanh.

Sử dụng mili giây cho phần bù có lẽ là linh hoạt nhất, nhưng tôi cho rằng phút đó dễ đọc hơn rất nhiều. Nếu bạn sẽ xem xét dữ liệu "thô" trong cơ sở dữ liệu, thì dễ hiểu hơn giá trị 60 = 1 giờ hơn 3600000. Tôi không thể tưởng tượng bạn thực sự cần phân số phút là bù đắp.

1

cửa hàng datetime như datetime và bù đắp như mili giây (bigint)

4

Bình thường hóa tất cả DateTimeOffsets thành bù chung, tốt nhất là UTC. Sau đó, chỉ cần lưu trữ DateTime như bình thường. Khi khai thác khôi phục lại bù đắp, mà phải là một hằng số. Điều này không giữ lại bù đắp gốc nhưng bù đắp là mơ hồ đến một múi giờ anyway.

Nếu bạn thực sự cần biết nguồn gốc ngày/giờ, thì bạn cần lưu trữ một số thông tin múi giờ. Điều này là do một bù đắp đơn giản không thể đại diện rõ ràng nguồn gốc của một thời gian. Vui lòng xem tài liệu MSDN (hơi khó hiểu) về Choosing Between DateTime, DateTimeOffset, and TimeZoneInfo.

+0

Đồng ý - lưu trữ ngày dưới dạng UTC và chỉ lo lắng về múi giờ và chênh lệch DST tại thời điểm trình bày cho người dùng. –

+1

Tôi không đồng ý. Cấu trúc DateTimeOffset (trong C# và SQL 2008) lưu trữ thời gian dưới dạng UTC hoặc local + offset. Lưu trữ một thời gian UTC + bù đắp sẽ đảo ngược mối quan hệ đó và chỉ gây nhầm lẫn. –

Các vấn đề liên quan