假设服务器位于美国(MST),并且来自Chennai(IST)的用户正在付款。服务器和用户都在不同的时区。 MST(山地标准时间)比格林威治标准时间(Greenwich Meridian Time)落后7小时,IST(印度标准时间)比GMT早5.30小时,即服务器和用户的时差为12:30小时。如果用户在9/20/2011 9:00 AM付款,那么服务器上的时间是8/20/2011晚上8:30。那么你必须在数据库中记录哪个时间?如果应用程序将用户的时间存储在数据库中,那么如果来自美国的某人看到该交易可能会看到错误的时间,即8/20/2011晚上8:30。另一个选择是将服务器的时间存储在数据库中(我们通常会这样做),然后用户会在看错时间时感到不快。
你能帮我吗?非常感兴趣。答案 0 :(得分:2)
答案 1 :(得分: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 );
}