gpt4 book ai didi

c# - 本地时间和服务器时间有区别

转载 作者:太空狗 更新时间:2023-10-29 20:24:32 26 4
gpt4 key购买 nike

在 MVC4 C# 应用程序中,当在我的应用程序中创建对象时,我使用了 DateTime.Now。部署后,本地计算机和主机之间存在 +8 小时的差异。然后我将其更改为 DateTime.UtcNow,现在相差 -4 小时。

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

如果所有国家/地区的所有用户都使用同一个日期,我应该怎么做?

编辑:我的时区是(UTC+04:00) Baku,服务器遵循PST

最佳答案

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

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

在所有地方使用 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

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

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

我会建议第一个选项,因为第二个选项会给人们带来更多困难。例如,如果他们位于英国并且本周飞往各州。一切都会改变区域,他们可能没有意识到!

关于c# - 本地时间和服务器时间有区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15521245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com