我們在兩個單獨的位置有兩個數據庫。其中一個數據庫位於與我們的用戶不同的時區。Oracle日期字段 - 時間問題
問題是,當位於單獨時區的數據庫更新並帶有Date值時,數據庫自動從它傳遞的日期中減去1:00小時。
問題是,當傳遞NULL日期(12:00:00)時,DAY值更改爲前一天。
更新通過存儲過程完成,前端是一個VB.NET智能客戶端。
你會如何處理這種適當的方式?我基本上不想存儲時間,但我似乎無法弄清楚如何做到這一點。
我們在兩個單獨的位置有兩個數據庫。其中一個數據庫位於與我們的用戶不同的時區。Oracle日期字段 - 時間問題
問題是,當位於單獨時區的數據庫更新並帶有Date值時,數據庫自動從它傳遞的日期中減去1:00小時。
問題是,當傳遞NULL日期(12:00:00)時,DAY值更改爲前一天。
更新通過存儲過程完成,前端是一個VB.NET智能客戶端。
你會如何處理這種適當的方式?我基本上不想存儲時間,但我似乎無法弄清楚如何做到這一點。
不清楚數據庫中您想要的日期時間或應用程序傳遞的內容。
假設用戶的PC告訴他它是星期二上午12點30分,並且Db服務器上的時鐘週一晚上11點30分說。
如果爲'當前日期'(例如TRUNC(SYSDATE))插入一個值,那麼就數據庫而言,它仍然是星期一。 如果你爲'當前時間(例如SYSDATE)插入一個值,它仍然是星期一。 如果爲會話的當前時間(例如CURRENT_TIMESTAMP)和時區插入一個值,並要求數據庫將其存儲在數據庫中,它將存儲下午11:30。 如果您要求數據庫存儲日期時間'2009-12-31 14:00:00',那麼它將存儲它。如果您要求它存儲日期時間/時區'2009-12-31 14:00:00 +08:00',則表示您處於高級手冊中。您可以要求數據庫使用timezone data來存儲時間戳。也考慮daylight saving
這不在您提問的範圍之內,但我會建議在所有用戶從不同時區訪問數據庫的情況下,應將服務器和數據庫時鐘時區設置爲UTC。這可能爲時已晚,但將數據庫服務器設置爲UTC可消除夏令時和不同時區帶來的問題。
在我的觀點中,日期/時間數據可以並且應該總是以UTC存儲。這些數據可以在提交給用戶的地方轉換爲本地時間。實際上,使用TIME ZONE數據類型的TIMESTAMP可以讓Oracle輕鬆實現。它允許您以UTC(SYS_EXTRACT_UTC)或本地時間(本地到數據庫服務器)的方式訪問數據。
世界上的所有地方都不是同一天,所以日期不能沒有時間考慮。
當然,我的另一個看法是夏時制應該被淘汰。但那是另一個話題。
Oracle數據庫中的列是否定義爲DATE?一個TIMESTAMP?帶有[本地]時區的TIMESTAMP? – 2009-08-25 15:04:43
通過數據庫鏈接或直接從您的vb應用程序完成更新? – Christian13467 2009-08-25 15:09:11
該列是DATE列。 – jgallant 2009-08-25 15:27:34