2017-08-07 125 views
0

假設服務器位於美國(MST),而來自欽奈(IST)的用戶正在進行付款。服務器和用戶都在不同的時區。 MST(山區標準時間)比格林威治標準時間格林威治時間晚7個小時,印度標準時間IST(格林威治標準時間)比格林威治標準時間早5.30小時,即服務器和用戶的時差爲12:30。如果用戶在2011年9月20日上午9:00進行付款,那麼服務器上的時間爲8/20/2011 8:30 PM。那麼你需要在數據庫中記錄哪些時間?如果應用程序將用戶的時間存儲在數據庫中,那麼如果來自美國的人看到交易可能會看到錯誤的時間,即2011年8月20日下午8:30。另一種選擇是將服務器的時間存儲在數據庫中(這是我們通常所做的),然後用戶會看到錯誤的時間而不高興。如何在客戶端時區顯示日期和時間

你能幫我嗎。很多appriciated。

+1

的一個好方法(恕我直言)至處理這個問題是讓服務器處於GMT時間,並讓每個人都同步到該時區。然後,將會有一個轉換,但沒有人需要考慮它們的位置,除非它們與GMT時間相關(並且每個DB的用戶都知道這一點)。 –

回答

2

我總是使用UTC時間記錄任何計算機/服務器周圍的一切。

DateTime.UtcNow

然後,當我顯示日期和時間的一些用戶,我只是改變它的基礎上爲本地時區。

1

在保存任何日期轉換爲UTC並保存到數據庫,例如;

var now = DateTime.Now; 
var Date = now.ToUniversalTime(); 

OR

var Date = DateTime.UtcNow; 

和上顯示日期來獲得用戶的當前時區,並用它來轉換UTC日期,

var _Timezone = // store timezone id here 
var southPole = TimeZoneInfo.FindSystemTimeZoneById(_Timezone); 
DateTime userTime = TimeZoneInfo.ConvertTimeFromUtc(Date , southPole); 

可以存儲在不同用戶的時區一個數據庫或獲取登錄用戶的當前時區;

var _Timezone = new Date().getTimezoneOffset(); 

這種方法並不適用於服務器端,

注意

你可以從這個代碼時區的列表,

var timeZones = System.TimeZoneInfo.GetSystemTimeZones(); 

foreach (var timeZone in timeZones) 
{ 
    Console.WriteLine("{0} - {1}", timeZone.Id, timeZone.DisplayName); 
} 
相關問題