TimeZoneconverter是一个轻巧的库,可在IANA,Windows和Rails时区名称之间快速转换。
注意:如果您需要POSIX时区支持,也可以使用单独的TimeZoneConverter.Posix
软件包。
TimeZoneConverter
Nuget软件包添加到您的项目中。TimeZoneConverter
名称空间。 截至6.0.0版本,TimeZoneConverter可处理以下所有内容:
.NET框架版本不再支持4.6.2。
.NET 6以跨平台的方式对IANA和Windows时区具有内置支持,从而减少了对该库的需求。它依靠.NET的ICU集成来执行此功能。有关详细信息,请参见.NET博客。
重述,如果您仅针对.NET 6(或更高),并且启用了平台提供或启用了应用程序ICU,则可能不需要使用此库。但是,确实仍然得到支持,许多人发现它在某些环境或特定平台上仍然很有用。
TimeZoneConverter在运行时没有外部数据依赖项。它需要的所有数据都嵌入了库本身。
某些功能在TimeZoneConverter中,例如TZConvert.GetTimeZoneInfo
依赖于具有访问操作系统时区数据的基础TimeZoneInfo
对象。在Windows上,此数据来自注册表,并通过Windows更新维护。
在OSX和Linux上,此数据通常来自IANA时区数据库的分布,通常是通过tzdata
软件包的分布。如果您的环境未安装tzdata
软件包,则需要将其安装到TZConvert.GetTimeZoneInfo
中才能正常工作。
例如,.NET Core的高山Linux Docker图像不再与tzdata
一起运送。有关如何将其添加到Docker映像的说明,请参见Dotnet/dotnet-docker#1366。
该库结合了数据源来实现其目标:
ActiveSupport::TimeZone
的MAPPING
数据。通常,后者保留用于边缘案件,以及可能已发布或可能未发布给官方消息来源的新引入的区域。
重要的是:由于每当从任何这些来源引入新的时区时,这些数据都可以更改,因此建议您始终使用最新的修订版,并定期检查更新。
此外,此库未尝试确定代码正在运行的计算机上是否真的存在提供的时区ID。假定计算机与时区更新保持最新。
例如,如果有人尝试将Africa/Khartoum
转换为Windows时区ID,他们将获得Sudan Standard Time
。如果然后在尚未安装KB4051956
的Windows计算机上使用(创建了这个时区),则他们可能会获得TimeZoneNotFoundException
。
一个区域可能会无法实现- 这意味着从一种类型的时区到另一种类型的逻辑等效。
当前,只有一个IANA区域不适合Windows,即Antarctica/Troll
。换句话说,对于可能位于南极洲巨魔站的Windows用户来说,没有“正确”时区。因此,如果您尝试将Antarctica/Troll
转换为Windows,则将获得TimeZoneNotFoundException
。
有许多区域对铁轨无法实现。完整列表在此处的单元测试代码中。
将IANA时区名称转换为最合适的Windows时区ID。
string tz = TZConvert . IanaToWindows ( " America/New_York " ) ;
// Result: "Eastern Standard Time"
将Windows时区名称转换为最佳拟合IANA时区名称。
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " ) ;
// result: "America/New_York"
关于特定国家 /地区,将Windows时区名称转换为最合适的IANA时区名称。
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " , " CA " ) ;
// result: "America/Toronto"
从.NET核心获取TimeZoneInfo
对象,无论您运行什么操作系统:
// Either of these will work on any platform:
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " Eastern Standard Time " ) ;
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " America/New_York " ) ;
将导轨时区名称转换为最合适的IANA时区名称。
string tz = TZConvert . RailsToIana ( " Mexico City " ) ;
// result: "America/Mexico_City"
将导轨时区名称转换为最合适的Windows时区ID。
string tz = TZConvert . RailsToWindows ( " Mexico City " ) ;
// result: "Central Standard Time (Mexico)"
将IANA时区名称转换为一个或多个导轨时区名称。
IList < string > tz = TZConvert . IanaToRails ( " America/Mexico_City " ) ;
// Result: { "Guadalajara", "Mexico City" }
将Windows时区ID转换为一个或多个导轨时区名称。
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" }
您可能会发现一些其他帮助者。
这些属性提供了此库已知的各种时区的列表:
TZConvert.KnownIanaTimeZoneNames
TZConvert.KnownWindowsTimeZoneIds
TZConvert.KnownRailsTimeZoneNames
如果您需要在给定区域中适用的时区列表,则可以使用:
TZConvert.GetIanaTimeZoneNamesByTerritory()
根据MIT许可条款免费提供该图书馆。