c# – 本地和服务器时间之间存在差异

前端之家收集整理的这篇文章主要介绍了c# – 本地和服务器时间之间存在差异前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在MVC4 C#应用程序中,我在我的应用程序中创建对象时使用了DateTime.Now.部署后,本地计算机与托管之间存在8小时的差异.然后我将其更改为DateTime.UtcNow,现在差异为-4小时.

例如,在我的计算机日期是2013年3月20日,14:28:12,但日期存储到数据库,如2013年3月20日,10:28:12.

我应该为所有国家的所有用户使用同一个日期做什么?

编辑:我的时区是(UTC 04:00)巴库,服务器正在跟随PST

解决方法

例如,假设您的用户位于纽约(GMT – 5),而您的服务器位于印度(GMT 5:30).

用户看到上午10:00(美国东部时间)的“本地”时间时,您的服务器将看到下午7:30(IST)的“本地”时间.但是,通过在两个地方使用UTC ……用户将看到UTC时间为下午3点,服务器将看到UTC时间为下午3点.

在所有地方使用UTC但保留用户时区的参考允许您始终使用UTC,但是当您想要向他们展示时,仍然将时间转换为用户“本地”时间.

如果服务器是虚拟服务器,您也不能依赖服务器的托管位置.您也不能假设托管公司将服务器设置为什么时区.在数据库中存储日期时间时,最好始终使用DateTime.UtcNow进行防御性编码.

要将此UTC时间转换回用户的时区,您需要执行以下操作:

DateTime utcTime = new DateTime(2013,03,25,10,20,00);
TimeZoneInfo usersTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime usersLocalTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime,usersTimeZone);
Console.WriteLine(utcTime.ToString("hh:mm:ss");
Console.WriteLine(usersLocalTime.ToString("hh:mm:ss");

仅供参考,您可以从以下位置找到时区列表:

TimeZoneInfo.GetSystemTimeZones()

这应打印出来:

10:20:00
05:20:00

如您所见,您需要知道用户的时区.有两种方法可以了解用户的时间:

>让用户在其用户首选项中选择他们的时区
>使用一些javascript来检测他们机器的时区并将其与表单一起发回

我会建议第一个选择,因为第二个选项可以让人们更加困难.例如,如果他们是英国人并且本周飞往各州.一切都会改变区域,他们可能没有意识到!

猜你在找的C#相关文章