2017-08-07 124 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); 
} 
相关问题