2011-10-27 101 views
1

我們有一個ASP.NET網站和一個在美國託管的SQL數據庫。無論何時我在VB.NET和getdate()中使用函數Now()來獲取美國當前的時間。問題是,客戶位於GMT + 8時區的菲律賓。我的問題是,有什麼辦法可以設置特定數據庫和網站的時區,這樣當我使用這些功能時,我會得到菲律賓目前的時間?你如何處理這個問題?儘可能地,我們不希望減去或增加功能的結果日期,因爲將來,客戶將來自其他國家。如果我們這樣做,它會讓我們頭痛的更新代碼。ASP.NET/SQL Server - 設置時區

預先感謝您!

回答

3

鑑於您的客戶可能處於不同的時區,您應該爲客戶存儲一個時區,以便他們(或您)可以將其設置爲其帳戶的偏好。將所有日期和時間存儲爲UTC,然後在界面中顯示結果時轉換爲其時區。

這個問題已經在下面的問題涉及到一個很大的程度: How to work with time zones in ASP.NET?

後續: 不幸的是,SQL服務器日期是系統級設置,所以它不是真正的東西,可以在每個會話的基礎上進行操縱。這聽起來像你需要做一些代碼更改,但你可以隔離它們。

  1. 您是否有包含客戶端時區偏移的會話級變量?如果沒有,請創建一個。

  2. 創建一個小的日期/時間實用程序類。

  3. 在工具類,提供3種方法: (1)獲得的當前日期/時間(偏移到客戶端的時區) (2)在數據庫中的日期通過/時間返回的時間偏移客戶的TZ。 (3)從客戶端傳遞一次以減去客戶端的TZ差異。

你將不得不更改代碼,但你可能可以使用這些實用功能包的輸入和輸出無處不在,集中的邏輯。 Microsoft使用DateTime類和操作時區時有一個關於錯誤步驟的頁面: http://msdn.microsoft.com/en-us/library/ms973825.aspx#datetime_topic1a

+0

感謝您的回答。除了在顯示之前操縱時間之外,還有其他方法嗎?我們有另一個應用程序,現有的應用程序,它有相同的情況,我認爲更新代碼將是一個痛苦。 – dpp

+0

不幸的是,SQL服務器日期是一個系統級的設置,所以它不是每個會話都可以操縱的東西。我打算在SQL服務器中使用getutcdate()。 –