TimezoneConverter는 Iana, Windows 및 Rails Time Zone 이름을 빠르게 변환 할 수있는 가벼운 라이브러리입니다.
참고 : POSIX 시간대 지원이 필요한 경우 별도의 TimeZoneConverter.Posix 패키지도 사용할 수 있습니다.
TimeZoneConverter Nuget 패키지를 프로젝트에 추가하십시오.TimeZoneConverter 네임 스페이스를 가져옵니다. 버전 6.0.0 기준 TimezoneConverter는 다음과 같은 모든 작업과 함께 작동합니다.
.NET Framework 버전 4.6.2 미만은 더 이상 지원되지 않습니다.
.NET 6에는 교차 플랫폼 방식으로 IANA 및 Windows Time Zones에 대한 내장 지원이 있어이 라이브러리의 필요성이 다소 줄어 듭니다. 이 기능을 수행하기 위해 .NET의 ICU 통합에 의존합니다. 자세한 내용은 .NET 블로그를 참조하십시오.
Rested, RESTED, .NET 6 (이상) 만 타겟팅하고 플랫폼 제공 또는 App-Local ICU가 활성화 된 경우이 라이브러리를 사용할 필요가 없을 수 있습니다. 그러나 실제로는 여전히 지원되고 있으며, 많은 사람들이 특정 환경이나 특정 플랫폼에서 계속 유용하다는 것을 알게되었습니다.
TimeZoneConverter는 런타임에 외부 데이터 종속성이 없습니다. 필요한 모든 데이터는 라이브러리 자체에 포함되어 있습니다.
TZConvert.GetTimeZoneInfo 와 같은 TimezoneConverter의 일부 기능은 운영 체제의 시간대 데이터에 액세스 할 수있는 기본 TimeZoneInfo 객체에 의존합니다. Windows 에서이 데이터는 레지스트리에서 제공되며 Windows 업데이트를 통해 유지됩니다.
OSX 및 Linux 에서이 데이터는 일반적으로 tzdata 패키지를 통해 IANA 시간대 데이터베이스의 배포에서 비롯됩니다. 환경에 tzdata 패키지가 설치되어 있지 않은 경우 TZConvert.GetTimeZoneInfo 에 올바르게 작동하려면 설치해야합니다.
예를 들어, .NET Core 용 Alpine Linux Docker 이미지는 더 이상 tzdata 와 함께 배송되지 않습니다. Docker 이미지에 추가하는 방법에 대한 지침은 DotNet/DotNet-Docker#1366을 참조하십시오.
이 라이브러리는 데이터 소스 조합을 사용하여 목표를 달성합니다.
ActiveSupport::TimeZone 의 MAPPING 데이터.일반적으로 후자는 엣지 케이스와 아직 공식 출처에 출판되었을 수도 있고 아닐 수도있는 새로 도입 된 구역을 위해 예약되어 있습니다.
중요 : 이 데이터는 이러한 소스에서 새로운 시간대가 도입 될 때마다 변경 될 수 있으므로 항상 최신 개정판을 항상 사용하고 정기적으로 업데이트를 확인하는 것이 좋습니다.
또한이 라이브러리는 제공된 시간대 ID가 실제로 코드가 실행중인 컴퓨터에 있는지 확인하려고 시도하지 않습니다. 컴퓨터는 시간대 업데이트로 최신 상태로 유지된다고 가정합니다.
예를 들어, Africa/Khartoum Windows 타임 존 ID로 변환하려는 경우 Sudan Standard Time 걸립니다. 그런 다음 아직 KB4051956 설치되지 않은 Windows 컴퓨터에서 사용되는 경우 (이 시간대를 생성) TimeZoneNotFoundException 을 얻을 수 있습니다.
영역이 애호가가 가능하지 않을 수 있습니다. 즉, 한 유형의 시간대에서 다른 유형의 시간대로 논리적으로 동등하지 않다는 것을 의미합니다.
현재 Antarctica/Troll 인 Windows에 적용 할 수없는 IANA 구역은 하나뿐입니다. 다시 말해, 남극 대륙 트롤 스테이션에 주둔 할 수있는 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" 실행중인 OS에 관계없이 .NET Core에서 TimeZoneInfo 객체를 얻으십시오.
// Either of these will work on any platform:
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " Eastern Standard Time " ) ;
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " America/New_York " ) ;Rails Time Zone 이름을 가장 적합한 Iana 시간대 이름으로 변환하십시오.
string tz = TZConvert . RailsToIana ( " Mexico City " ) ;
// result: "America/Mexico_City"Rails 시간대 이름을 가장 잘 맞는 Windows 시간대 ID로 변환하십시오.
string tz = TZConvert . RailsToWindows ( " Mexico City " ) ;
// result: "Central Standard Time (Mexico)"IANA 시간대 이름을 하나 이상의 Rails 시간대 이름으로 변환하십시오.
IList < string > tz = TZConvert . IanaToRails ( " America/Mexico_City " ) ;
// Result: { "Guadalajara", "Mexico City" }Windows 시간대 ID를 하나 이상의 Rails 타임 존 이름으로 변환하십시오.
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" } 유용 할 수있는 몇 가지 추가 도우미가 있습니다.
이 속성은이 라이브러리에 알려진 다양한 유형의 시간 영역 목록을 제공합니다.
TZConvert.KnownIanaTimeZoneNamesTZConvert.KnownWindowsTimeZoneIdsTZConvert.KnownRailsTimeZoneNames주어진 지역에 적용 가능한 시간대 목록이 필요한 경우 다음을 사용할 수 있습니다.
TZConvert.GetIanaTimeZoneNamesByTerritory()이 라이브러리는 MIT 라이센스의 조건에 따라 무료로 제공됩니다.