如何解决无论操作系统如何,如何获取特定的TimeZoneInfo?
在.NET Core中,我想简单地将UTC日期时间转换为特定时区中的一个。
好像我需要打电话给TimeZoneInfo.ConvertTimeFromUtc(myUtcDateTime,specificTimeZone)
,但是如何获取 specificTimeZone ?
使用TimeZoneInfo.FindSystemTimeZoneById("My timezone name")
似乎有风险,因为我想在不同的系统中使用此功能,这些系统可能具有自己的时区名称。
解决方法
关于:
我想在可能具有自己的时区名称的不同系统中使用此功能。
只有三种可能性可供考虑:
-
操作系统是Windows。
FindSystemTimeZoneById
和GetSystemTimeZones
适用于Windows时区。例如,"Romance Standard Time"
是法国的时间标识符。 -
该操作系统不是Windows(OSX,Linux等),并且系统安装了时区数据(例如
tzdata
软件包)。FindSystemTimeZoneById
和GetSystemTimeZones
使用IANA时区。例如,"Europe/Paris"
是法国的时间标识符。 -
该操作系统不是Windows,并且未安装时区数据。例如,具有有限存储空间的IoT设备和轻量级容器环境。值得注意的是,Alpine Linux发行版默认不包含
tzdata
软件包。在这种情况下,GetSystemTimeZones
不返回任何内容,而FindSystemTimeZoneById
总是抛出TimeZoneNotFoundException
。
对于前两个问题,您可以利用我的TimeZoneConverter库。它将使您可以在任一平台上使用两种形式的标识符。
对于最后一个问题,您要么需要在操作系统上安装tzdata
,要么需要携带自己的tzdata,例如Noda Time提供的库。
最后,我要指出,操作系统上的任何时区数据都必须保持更新。否则,您的代码可能会有一个新创建的时区存在的风险-但包含该时区的updatate尚未到达计算机。除非您将它们特别配置为不(例如Windows Update等),否则所有现代OS都会自动执行此操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。