Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TimeZoneInfo Id是否依赖于计算机?_C#_.net_Timezone - Fatal编程技术网

C# TimeZoneInfo Id是否依赖于计算机?

C# TimeZoneInfo Id是否依赖于计算机?,c#,.net,timezone,C#,.net,Timezone,我正在代码中使用TimeZoneInfo.FindSystemTimeZoneById() 我知道这个方法适用于系统注册表上的ID 所以我想知道当它进入服务器时是否有可能不能正常工作,因为服务器注册表上的ID与本地的不一样 有人知道这件事吗?根据,如果找不到Id,您将获得一个 找不到id指定的时区标识符。这意味着 名称与id匹配的注册表项不存在,或者 键存在,但不包含任何时区数据 根据,如果找不到Id,您将获得一个 找不到id指定的时区标识符。这意味着 名称与id匹配的注册表项不存在,或者 键存

我正在代码中使用
TimeZoneInfo.FindSystemTimeZoneById()

我知道这个方法适用于系统注册表上的ID

所以我想知道当它进入服务器时是否有可能不能正常工作,因为服务器注册表上的ID与本地的不一样

有人知道这件事吗?

根据,如果找不到Id,您将获得一个

找不到id指定的时区标识符。这意味着 名称与id匹配的注册表项不存在,或者 键存在,但不包含任何时区数据

根据,如果找不到Id,您将获得一个

找不到id指定的时区标识符。这意味着 名称与id匹配的注册表项不存在,或者 键存在,但不包含任何时区数据


时区的东西总是让我困惑,但我的答案是肯定的。有可能在不同的服务器中不起作用

方法使用
HKEY\U LOCAL\U MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones
注册表信息。有时微软会发布一些windows更新来更改这些信息

比如,

  • 欧洲标准时间:此时区的显示名称已更新为“(UTC+2:00)欧洲东部。“从”(UTC+2:00)尼科西亚。”
  • 亚速尔群岛标准时间:将2013年DST开始时间更改为3月最后一个星期日上午12:00:00,结束时间更改为 10月最后一个星期日的凌晨1:00:00
  • 太平洋标准时间:正如之前在微软知识库文章2681116中宣布的那样,智利延长了2012年的白天 节省时间。智利政府已经改变了2012年DST的开始 日期发生在9月23日第一个星期六:59:59.999,结束 日期为4月最后一个星期六23:59:59.999

如您所见,您的一台服务器的注册表中没有相同的信息(例如,其中一台无法更新),这些
时区
信息看起来不同。

时区
东西总是让我困惑,但我的回答是肯定的。有可能在不同的服务器中不起作用

方法使用
HKEY\U LOCAL\U MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones
注册表信息。有时微软会发布一些windows更新来更改这些信息

比如,

  • 欧洲标准时间:此时区的显示名称已更新为“(UTC+2:00)欧洲东部。“从”(UTC+2:00)尼科西亚。”
  • 亚速尔群岛标准时间:将2013年DST开始时间更改为3月最后一个星期日上午12:00:00,结束时间更改为 10月最后一个星期日的凌晨1:00:00
  • 太平洋标准时间:正如之前在微软知识库文章2681116中宣布的那样,智利延长了2012年的白天 节省时间。智利政府已经改变了2012年DST的开始 日期发生在9月23日第一个星期六:59:59.999,结束 日期为4月最后一个星期六23:59:59.999
如您所见,您的一台服务器的注册表中没有相同的信息(例如,其中一台无法更新),这些时区信息看起来不同。

虽然可能找不到ID(请参阅其他答案),但如果两台计算机都有最新的Windows更新,那么,不太可能出现不匹配

即便如此,尽管夏令时和显示名称的定义每年都会发生多次更改,但创建全新时区的情况却很少,而且一旦建立,ID将永远不会更改

因此,只要您的服务器至少有时区的当前Windows更新,那么您就应该能够处理来自客户端的任何有效输入,即使它们不是最新的。您可以在上查看Windows的所有时区更新

然而,尽管如此,我最好的建议是放弃使用微软时区,改用标准IANA时区。有关详细信息,请参阅。在.NET中,实现这一点的最佳方法是使用库。

虽然可能找不到ID(请参阅其他答案),但如果两台计算机都有当前的Windows更新,则不太可能存在不匹配

即便如此,尽管夏令时和显示名称的定义每年都会发生多次更改,但创建全新时区的情况却很少,而且一旦建立,ID将永远不会更改

因此,只要您的服务器至少有时区的当前Windows更新,那么您就应该能够处理来自客户端的任何有效输入,即使它们不是最新的。您可以在上查看Windows的所有时区更新


然而,尽管如此,我最好的建议是放弃使用微软时区,改用标准IANA时区。有关详细信息,请参阅。在.NET中,实现这一点的最佳方法是使用库。

因为您只需要将服务器日期时间转换为本地客户端时间(而不是跨客户端转换),所以在通信中使用UTC时间,在客户端上使用
datetime.ToLocal()
。这样您就不必担心注册表或时区了。

因为您只需要将服务器日期时间转换为本地客户机时间(而不是跨客户机转换),在通信中使用UTC时间,在客户机上使用
datetime.ToLocal()
。这样您就不必担心注册表或时区了。

为什么需要时区ID?它们非常“不稳定”——例如,某些机器可能没有正确的时区更新,在客户端和服务器上为同一时区呈现不同的时间。你能用UTC吗?@DarkWanderer因为我会在不同的时区使用服务器和客户端,比如