2014-03-03 36 views
0

我創建了一個android客戶端服務器應用程序,它涉及將日期時間值存儲到數據庫中。服務器是mssql服務器。服務器端編程在c#中完成。當前時間以datetime2值的形式存儲在數據庫中。服務器時區是美國山區標準時間。它與格林威治標準時間的偏差爲-07小時。那是服務器時間是GMT-7.00。我目前的當地時間是GMT + 05.30。我已經開發這個android應用程序在GMT + 05.30時區工作。所以我需要知道如何將服務器時間從GMT-07.00轉換爲GMT + 05.30。Android應用程序中服務器和客戶端的時區差異

我曾嘗試使用下面的代碼創建關閉服務器時間和GMT。

TimeZone zone = TimeZone.CurrentTimeZone; 
DateTime server=DateTime.Now; 
DateTime universal=zone.ToUniversalTime(DateTime.Now); //GMT TIME 
//I have found that My server offset from GMT is -07.00 using the below code 
TimeSpan offset = zone.GetUtcOffset(DateTime.Now); 

當我將下列值輸入到我的服務器數據庫中時,它會以此格式輸入到表中。

Here my local time is: 2014-02-03 20:25:08.0000000 

my server time at that moment is: 2014-03-03 07:55:28.0000000 

the utc time at that moment is: 2014-03-03 14:55:28.0000000 

因此,從我的服務器時間和當地時間總共有約12小時30分鐘的時差。如果此位置的服務器因任何原因而關閉,則服務器將從具有不同時區和不同偏移量的另一個位置運行。所以服務器時間和本地時間之間的差別有時會改變。這會導致我的應用出現問題,因爲我的價值觀有時會出錯。有什麼方法可以在我需要的時候找到偏移量並計算我的服務器的時間並使其與當地時間相同?

+1

1.不要使用'TimeZone'。它已被棄用,請使用'TimeZoneInfo'代替。 2. [絕對不要在Web應用程序中使用DateTime.Now](http://codeofmatt.com/2013/04/25/the-case-against-datetime-now/)。 3.如果你需要UTC時間,只需使用'DateTime.UtcNow'。 4.我的代碼中沒有看到與客戶端代碼交互的任何地方,但您似乎想要神奇地調整客戶端時區? 5.你究竟在這裏問了什麼?這是你寫的方式混淆。 –

回答

1

存儲你的數據作爲DateTimeOffset如果你使用SQL 2008年開始。

這應該讓事情變得跨時區的比較容易。然後,您可以比較使用ToLocalTime

相關問題