كيفية استخدام الوقت > العام 2038 على Windows Python 2.5 الرسمي

StackOverflow https://stackoverflow.com/questions/839755

سؤال

تم إنشاء إصدار Python 2.5 الرسمي على Windows باستخدام Visual Studio.Net 2003، والذي يستخدم 32 بت time_t.لذلك عندما يكون العام> 2038، فإنه يعطي استثناءات فقط.

على الرغم من أن هذا قد تم إصلاحه في Python 2.6 (الذي غيّر time_t إلى 64 بت مع VS2008)، إلا أنني أرغب في استخدام 2.5 لأن العديد من الوحدات قد تم تجميعها بالفعل من أجله.

إذن هذا هو سؤالي - هل هناك أي حل للسماح لبرنامجي بالتعامل بسهولة مع العام> 2038 وما زال يستخدم Python 2.5 الرسمي؟على سبيل المثال بعض المكتبات المعدة مسبقًا مثل "time64" أو "منذ زمن طويل" الخ...

من فضلك لا تطلب مني الترقية إلى الإصدار 2.6+ أو نسيان الخطأ - لدي سبب لضرورة إنجاحه، ولهذا السبب أنشر السؤال هنا.

هل كانت مفيدة؟

المحلول 3

والحل الأفضل وجدتها هو الحصول على نسخة من المصدر بيثون 2.5، وإعادة تجميع وحدة الوقت مع المجمعين الذي التخلف time_t إلى 64 بت، على سبيل المثال VS2005 أو VS2008 (يمكن أيضا تكوين C وقت التشغيل لمنع جنبا إلى جنب قضية).

نصائح أخرى

وحدة datetime في المكتبة القياسية يجب أن تعمل بشكل جيد بالنسبة لك. ماذا تحتاج من وحدة time أن datetime لا يقدم؟

لا أقصد أن أبدو مبتذلاً، لكن لماذا لا:

  • انسَ خطأ Y2038 مع Python 2.5
  • قم بالترقية إلى Python 2.6 في وقت ما في المستقبل قبل عام 2038

يحرر:للتوضيح:(وأنا جاد - لم أقصد السخرية)

من المفترض أنه يمكنك ترقية Python إلى 2.6 (أو الأحدث) في وقت غير محدد من الآن وحتى عام 2038.ربما في عام 2012.ربما في عام 2015.ربما في عام 2037.

إذا كنت على دراية بالاختلافات بين متغير الطابع الزمني لـ Python في تطبيقك (أنا لست من مستخدمي Python كثيرًا)، فيبدو أن هذه ستكون الجوانب المهمة التي يجب مراعاتها:

  • ما هي البيانات التي يتم حفظها باستمرار
  • كيف تتم استعادة متغير الطابع الزمني لـ Python 2.5 الذي استمر باستخدام Python 2.6 (من المفترض أنه "سيفعل الشيء الصحيح")
  • ما إذا كان سيتم تخزين البيانات القديمة في شكلها المستمر لفترة كافية لظهور الغموض (على سبيل المثال.العام "96" لا لبس فيه عند النظر إليه بين عامي 1950 و2049، ولكن إذا تم الاحتفاظ بهذه البيانات حتى عام 2230، فإن "96" يمكن أن يكون 1996 أو 2096 أو 2196).

إذا كانت الإجابات مواتية، فما عليك سوى استخدام الطابع الزمني العادي مع خطأ 2038 الخاص به.سيتعين عليك مقارنة ذلك بكمية إعادة التصميم/إعادة البناء التي يتعين عليك القيام بها لجعل تطبيقك يعمل بطابع زمني بديل (على سبيل المثال.سلسلة الطابع الزمني لقاعدة البيانات أو أيا كان).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top