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許可條款免費提供該圖書館。