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因为我会在不同的时区使用服务器和客户端,比如