2013-04-12 71 views
1

我們遇到一個問題,一個選擇查詢的程序位於一個時區,數據庫位於另一個時區,而日期比較包括多餘的一天。我猜這是因爲說@date <'2013-01-04'其中@date在英國被設置爲參數,但是對於美國的數據庫,由於時區差異,timeoffset部分將其移動進入第二天。SQL數據庫,日期類型和時區(ADO.NET)

數據庫中的DateTime基本上是一個整數(或長整數)。那麼,當數據庫的日期列值爲2013-01-04T00:00:00時,它如何與ADO.NET一起工作 - 是以UTC日期時間,本地日期時間(無論偏移本地恰好在那一點)存儲的, ,還是具體的抵消?

當我用DateTime(Kind == Local)設置該參數時,如何轉換?

謝謝 - 戴夫

回答

0

取決於數據庫。但是,說所有的數據庫都將日期存儲爲一個整數(如dot Net或javascript),肯定是不正確的。你不會在你的問題中指定您正在使用的數據庫產品,而是例如SQL Server使用整數:對於日期時間

SQL Server的內部表示和smalldatetime值的兩部分的值,其中第一部分是一個整數,表示自1900年1月1日以來的天數,第二部分是表示一天(對於時間)的小數部分的小數部分---所以整數值0(零)總是直接轉化爲午夜早晨1900年1月1日。

第二部分,時間部分在內部也是一個整數,代表午夜以來的時鐘滴答數。見this。時鐘滴答是1/300秒,大約3.333毫秒。

+1

是的但是......自1月1日以來的天數和秒數在哪裏?英格蘭的數值爲0是科羅拉多州的負數。 –

0

如果保存一個.NET日期時間,將始終在數據庫中的ToString()

它不會指定時區相同的值。

我推薦你在使用.ToUniversalTime()之前將所有的日期時間存儲到數據庫中,並且在讀取它們時假設所有的都是UTC。

相關問題