تحويل الأوقات المحلية القديمة والجديدة إلى UTC تحت نظام التشغيل Windows XP / Server 2003
-
12-09-2019 - |
سؤال
يحول طلبي التواريخ الماضية والحاضر من وقت محلي إلى UTC.
أحتاج إلى التأكد من أنني سأكرم أي تحديثات DST المستقبلية إلى Windows أثناء التعامل بشكل صحيح في التعامل بشكل صحيح.
يتم كتابة التطبيق في C ++ ويتم تشغيله على Server 2003.
الخيارات التي بحثتها:
gmtime()
وlocaltime()
ليست دائما صحيحة للتواريخ الماضية لأنها لن تلاحظ فقط قواعد DST الحالية. فيذات الصلة حتى السؤال)أ TZ قاعدة البيانات خارج لأنه يتطلب تحديث يدوي منفصل.
GetTimeZoneInformationForYear()
خارج لأنه يتطلب نظام التشغيل Vista / Server 2008.يتم تخزين معلومات DST السابقة في التسجيل, ، لكنني أبحث عن شيء أعلى مستوى.
تعزيز
date_time
:- صف دراسي
us_dst_rules
يتم إهمال ولا يتم تحديثه إذا كان نظام التشغيل التحديثات. - صف دراسي
dst_calc_engine<>
هو خليفته، لكنه لا يحترم تحديثات OS أيضا.
- صف دراسي
وبالتالي...
... هل أي شخص آخر يستخدم حل التسجيل الخام للقيام بذلك؟
... أي اقتراحات أخرى؟
(تحرير: اكتشف dst_calc_engine
لا يدعم تحديثات DST)
المحلول
أعتقد أنني أفضل إعادة التنفيذ GetTimeZoneInformationForYear
ومحتمل GetDynamicTimeZoneInformation
بناء على المعلومات في التسجيل في HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
.
بهذه الطريقة، سيتبع الرمز الخاص بك تحديثات Windows ويمكنك تبديل التعليمات البرمجية القذرة للتنفيذ الفعلي على منصات أعلى مستوى.
نظرا لأنك لا ترغب في استخدام قاعدة بيانات خارجية، فلا أعتقد أنه لا توجد خيارات أخرى قابلة للحياة.
نصائح أخرى
يمكنك استخدام GMT () ومحلية () للتواريخ في عام 2007 والإصدارات الأحدث (والاستفادة من تحديثات Windows DST)، واستخدم دفعة أو واحدة من الحلول الأخرى التي ذكرتها لاستخدام قواعد DST الصحيحة لعام 2006 والإصدارات السابقة.