Timezoneconverter เป็นห้องสมุดที่มีน้ำหนักเบาเพื่อแปลงอย่างรวดเร็วระหว่างชื่อ Iana, Windows และ Rails Time Zone
หมายเหตุ: แพ็คเกจ TimeZoneConverter.Posix
แยกต่างหากก็พร้อมใช้งานหากคุณต้องการการรองรับโซนเวลา Posix
TimeZoneConverter
Nuget ลงในโครงการของคุณTimeZoneConverter
ตามที่จำเป็น ณ รุ่น 6.0.0 Timezoneconverter ทำงานร่วมกับทั้งหมดต่อไปนี้:
. NET Framework เวอร์ชันน้อยกว่า 4.6.2 ไม่ได้รับการสนับสนุนอีกต่อไป
.NET 6 มีการสนับสนุนในตัวสำหรับ IANA และ Windows Time Zones ในลักษณะข้ามแพลตฟอร์มซึ่งช่วยลดความต้องการห้องสมุดนี้ได้บ้าง มันขึ้นอยู่กับการรวม ICU ของ. NET เพื่อดำเนินการฟังก์ชั่นนี้ ดูรายละเอียดบล็อก. NET
ปรับปรุงใหม่หากคุณกำหนดเป้าหมายเฉพาะ. NET 6 (หรือสูงกว่า) และคุณเปิดใช้งาน ICU แพลตฟอร์มหรือ App-Local ICU คุณ อาจ ไม่จำเป็นต้องใช้ไลบรารีนี้ อย่างไรก็ตามมันยังคงได้รับการสนับสนุนและหลายคนพบว่ามันยังคงมีประโยชน์ในสภาพแวดล้อมบางอย่างหรือบนแพลตฟอร์มเฉพาะ
Timezoneconverter ไม่มีการพึ่งพาข้อมูลภายนอกที่รันไทม์ ข้อมูลทั้งหมดที่ต้องการถูกฝังอยู่ในห้องสมุดเอง
ฟังก์ชั่นบางอย่างใน Timezoneconverter เช่น TZConvert.GetTimeZoneInfo
ขึ้นอยู่กับวัตถุ TimeZoneInfo
พื้นฐานที่สามารถเข้าถึงข้อมูลโซนเวลาของระบบปฏิบัติการ บน Windows ข้อมูลนี้มาจากรีจิสทรีและได้รับการดูแลผ่านการอัปเดต Windows
บน OSX และ Linux ข้อมูลนี้มาจากการกระจายของฐานข้อมูลโซนเวลา Iana ซึ่งมักจะผ่านแพ็คเกจ tzdata
หากสภาพแวดล้อมของคุณไม่ได้ติดตั้งแพ็คเกจ tzdata
คุณจะต้องติดตั้งสำหรับ TZConvert.GetTimeZoneInfo
เพื่อทำงานอย่างถูกต้อง
ตัวอย่างเช่นภาพ Alpine Linux Docker สำหรับ. NET Core ไม่ได้จัดส่งด้วย tzdata
อีกต่อไป ดู Dotnet/Dotnet-Docker#1366 สำหรับคำแนะนำเกี่ยวกับวิธีการเพิ่มลงในภาพนักเทียบท่าของคุณ
ห้องสมุดนี้ใช้การรวมกันของแหล่งข้อมูลเพื่อให้บรรลุเป้าหมาย:
MAPPING
จาก ActiveSupport::TimeZone
ในซอร์สโค้ดรถไฟโดยปกติแล้วหลังจะถูกสงวนไว้สำหรับกรณีที่ขอบและสำหรับโซนที่เพิ่งเปิดตัวใหม่ซึ่งอาจหรืออาจยังไม่ได้รับการเผยแพร่ไปยังแหล่งที่เป็นทางการ
สิ่งสำคัญ: เนื่องจากข้อมูลนี้สามารถเปลี่ยนแปลงได้เมื่อใดก็ตามที่มีการแนะนำโซนเวลาใหม่จากแหล่งข้อมูลเหล่านี้จึงขอแนะนำให้คุณใช้การแก้ไขล่าสุดและตรวจสอบการอัปเดตเป็นประจำ
นอกจากนี้ไลบรารีนี้ไม่ได้พยายามตรวจสอบว่ารหัสเวลาที่มีอยู่นั้นมีอยู่ในคอมพิวเตอร์ที่รหัสกำลังทำงานอยู่หรือไม่ สันนิษฐานว่าคอมพิวเตอร์จะถูกเก็บไว้เป็นปัจจุบันด้วยการอัปเดตโซนเวลา
ตัวอย่างเช่นหากมีใครพยายามแปลง Africa/Khartoum
เป็น ID โซนเวลา Windows พวกเขาจะได้รับ Sudan Standard Time
หากมีการใช้งานบนคอมพิวเตอร์ Windows ที่ยังไม่ได้ติดตั้ง KB4051956
(ซึ่งสร้างโซนเวลานี้) พวกเขาจะได้รับ TimeZoneNotFoundException
เป็นไปได้ที่โซนจะ ไม่สามารถใช้งานได้ - หมายความว่าไม่มีตรรกะเทียบเท่าจากเขตเวลาประเภทหนึ่งไปยังอีกประเภทหนึ่ง
ขณะนี้มีโซน Iana เพียงโซนเดียวที่ไม่สามารถคาดเดาได้กับ Windows ซึ่งเป็น Antarctica/Troll
กล่าวอีกนัยหนึ่งไม่มีโซนเวลา "ถูกต้อง" สำหรับผู้ใช้ Windows ที่อาจเกิดขึ้นในสถานีโทรลล์แอนตาร์กติกา ดังนั้นหากคุณพยายามแปลง Antarctica/Troll
เป็น Windows คุณจะได้รับ TimeZoneNotFoundException
มี หลาย โซนที่ไม่สามารถเข้าใจได้กับรางรถไฟ รายการที่สมบูรณ์อยู่ในรหัสทดสอบหน่วยที่นี่
แปลงชื่อโซนเวลา Iana เป็น ID โซนเวลา Windows ที่เหมาะสมที่สุด
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"
รับวัตถุ TimeZoneInfo
จาก. NET Core โดยไม่คำนึงถึงระบบปฏิบัติการที่คุณกำลังทำงานอยู่:
// 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 ที่เหมาะสมที่สุด
string tz = TZConvert . RailsToWindows ( " Mexico City " ) ;
// result: "Central Standard Time (Mexico)"
แปลงชื่อโซนเวลา Iana เป็นหนึ่งชื่อโซนเวลารถไฟหรือมากกว่า
IList < string > tz = TZConvert . IanaToRails ( " America/Mexico_City " ) ;
// Result: { "Guadalajara", "Mexico City" }
แปลง ID โซนเวลา Windows เป็นชื่อโซนเวลารางหนึ่งหรือมากกว่า
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" }
มีผู้ช่วยเพิ่มเติมสองสามคนที่คุณอาจพบว่ามีประโยชน์
คุณสมบัติเหล่านี้ให้รายการของเขตเวลาประเภทต่างๆที่รู้จักกันในห้องสมุดนี้:
TZConvert.KnownIanaTimeZoneNames
TZConvert.KnownWindowsTimeZoneIds
TZConvert.KnownRailsTimeZoneNames
หากคุณต้องการรายการโซนเวลาที่ใช้ในภูมิภาคที่กำหนดคุณสามารถใช้:
TZConvert.GetIanaTimeZoneNamesByTerritory()
ห้องสมุดนี้ให้บริการฟรีภายใต้เงื่อนไขของใบอนุญาต MIT