TimeZoneconverter هي مكتبة خفيفة الوزن لتحويلها بسرعة بين أسماء Iana و Windows و Rails الزمنية.
ملاحظة: تتوفر حزمة TimeZoneConverter.Posix
منفصلة أيضًا إذا كنت بحاجة إلى دعم المنطقة الزمنية Posix.
TimeZoneConverter
nuget إلى مشروعك.TimeZoneConverter
عند الحاجة. اعتبارًا من الإصدار 6.0.0 ، يعمل TimeZoneconverter مع كل ما يلي:
.
يحتوي .NET 6 على دعم مدمج لمناطق الزمن Iana و Windows بطريقة متقاطعة ، مما يقلل إلى حد ما من الحاجة إلى هذه المكتبة. يعتمد على تكامل وحدة العناية المركزة .NET لأداء هذه الوظيفة. انظر مدونة .NET للحصول على التفاصيل.
تم إعادة تجديده ، إذا كنت تستهدف فقط .NET 6 (أو أعلى) ، وكنت قد تم تمكين وحدة العناية المركزة التي تقدمها النظام الأساسي أو المحلي ، فقد لا تحتاج إلى استخدام هذه المكتبة. ومع ذلك ، لا يزال مدعومًا بالفعل ، وقد وجد الكثيرون أنه لا يزال مفيدًا في بيئات معينة أو على منصات محددة.
لا يوجد لدى TimeZoneconverter تبعيات بيانات خارجية في وقت التشغيل. يتم تضمين جميع البيانات التي تحتاجها في المكتبة نفسها.
تعتمد بعض الوظائف في TimeZoneconverter ، مثل TZConvert.GetTimeZoneInfo
على كائن TimeZoneInfo
الأساسي الذي يتمتع بالوصول إلى بيانات المنطقة الزمنية لنظام التشغيل. على Windows ، تأتي هذه البيانات من السجل ويتم الحفاظ عليها عبر تحديثات Windows.
على OSX و Linux ، تأتي هذه البيانات من توزيع قاعدة بيانات المنطقة الزمنية IANA ، وعادة ما يكون عبر حزمة tzdata
. إذا لم يتم تثبيت بيئتك على حزمة tzdata
، فستحتاج إلى تثبيتها لـ TZConvert.GetTimeZoneInfo
للعمل بشكل صحيح.
على سبيل المثال ، لم تعد صور Alpine Linux Docker لـ .NET Core شحن مع tzdata
. انظر Dotnet/Dotnet-Docker#1366 للحصول على تعليمات حول كيفية إضافتها إلى صور Docker الخاصة بك.
تستخدم هذه المكتبة مجموعة من مصادر البيانات لتحقيق أهدافها:
MAPPING
من ActiveSupport::TimeZone
في رمز المصدر Rails.عادةً ما يتم حجز هذا الأخير لحالات الحافة ، وللمناطق التي قد يتم تقديمها حديثًا والتي قد يتم نشرها أو لم يتم نشرها على المصادر الرسمية حتى الآن.
مهم: نظرًا لأن هذه البيانات يمكن أن تتغير كلما تم تقديم مناطق زمنية جديدة من أي من هذه المصادر ، فمن المستحسن أن تستخدم دائمًا أحدث مراجعة ، والتحقق من التحديثات بانتظام.
بالإضافة إلى ذلك ، لا تحاول هذه المكتبة تحديد ما إذا كانت معرفات المنطقة الزمنية المتوفرة موجودة بالفعل على الكمبيوتر حيث يتم تشغيل الرمز. من المفترض أن يتم الحفاظ على الكمبيوتر الحالي مع تحديثات المنطقة الزمنية.
على سبيل المثال ، إذا حاول المرء تحويل Africa/Khartoum
إلى معرف المنطقة الزمنية لـ Windows ، فسيحصلون على Sudan Standard Time
. إذا تم استخدامه بعد ذلك على جهاز كمبيوتر يعمل بنظام Windows الذي لم يتم تثبيته بعد KB4051956
(والذي أنشأ هذه المنطقة الزمنية) ، فمن المحتمل أن يحصلوا على TimeZoneNotFoundException
.
من الممكن أن تكون المنطقة غير قابلة للتطبيق - وهذا يعني أنه لا يوجد ما يعادل منطقي من نوع من المناطق الزمنية إلى أخرى.
يوجد حاليًا منطقة Iana واحدة لا يمكن تركها في Windows ، وهي Antarctica/Troll
. بمعنى آخر ، لا توجد منطقة زمنية "صحيحة" لمستخدمي Windows الذين قد يكونوا متمركزين في محطة القزم ، أنتاركتيكا. لذلك ، إذا حاولت تحويل Antarctica/Troll
إلى Windows ، فستحصل على TimeZoneNotFoundException
.
هناك العديد من المناطق التي لا يمكن تغطيتها للقضبان. القائمة الكاملة موجودة في رمز اختبار الوحدة هنا.
قم بتحويل اسم المنطقة الزمنية لـ IANA إلى أفضل معرف المنطقة الزمنية 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" }
قم بتحويل معرف Windows Time Zone إلى واحد أو أكثر من أسماء المنطقة الزمنية.
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" }
هناك عدد قليل من المساعدين الإضافيين قد تجده مفيدة.
توفر هذه الخصائص قوائم بأنواع مختلفة من المناطق الزمنية المعروفة لهذه المكتبة:
TZConvert.KnownIanaTimeZoneNames
TZConvert.KnownWindowsTimeZoneIds
TZConvert.KnownRailsTimeZoneNames
إذا كنت بحاجة إلى قائمة بالمناطق الزمنية التي تنطبق في منطقة معينة ، فيمكنك استخدام:
TZConvert.GetIanaTimeZoneNamesByTerritory()
يتم توفير هذه المكتبة مجانًا ، بموجب شروط ترخيص MIT.