سؤال

(أنا جديد على Python وGoogle App Engine، أرجو أن تسامحني إذا كانت أسئلتي تبدو أساسية).

أقضي وقتًا رائعًا في محاولة إدارة مناطق زمنية متعددة للمستخدم في تطبيق Google App Engine الخاص بي.

وهنا القيود الخاصة بي:

  1. إذا قام المستخدم بإدخال الوقت على أحد المدخلات، فسيكون التوقيت المحلي (بما في ذلك التوقيت الصيفي، عندما يكون ذلك مناسبًا).
  2. إذا لم يُدخل المستخدم الوقت، فيجب على النظام إدخاله بالتوقيت المحلي (بما في ذلك التوقيت الصيفي، عندما يكون ذلك مناسبًا).
  3. عندما يتم عرض التاريخ والوقت للمستخدم، يجب أن يكون بالتوقيت المحلي (بما في ذلك التوقيت الصيفي، عندما يكون ذلك مناسبًا)

أدرك أنه سيتم تخزين الوقت داخليًا بتنسيق UTC مع كائن tzinfo وأن محرك التطبيقات سيقوم بتخزين النماذج بتوقيت UTC.

لقد اعتقدت سابقًا أنني قمت بحل كل هذا من خلال مطالبة المستخدم بتحديد منطقته الزمنية في تفضيلاته.بعد ذلك، أود ببساطة تحميل تفضيلاتهم وإضافة معلومات tzinfo هذه إلى أي كائنات وقت وتاريخ في إشارة إلى ذلك المستخدم.

ومع ذلك، فقد كسر التوقيت الصيفي لدينا مؤخرًا.اتضح أنني لم أقم بتنفيذ dst() بشكل صحيح في كائنات tzinfo الخاصة بي.كما أفهمها، يجب أن أحدد ما إذا كان التوقيت الصيفي قيد التشغيل حاليًا، وإذا كان الأمر كذلك، فأرجع الإزاحة الصحيحة لملف tzinfo.

المشكلة هي أنه ليس لدي أي فكرة عن كيفية تحديد ما إذا كان التوقيت الصيفي للمنطقة الزمنية حاليًا أم لا.هل أفتقد شيئًا واضحًا؟

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

المحلول

إذا أمكن، أنصحك بإلقاء نظرة على python-dateutil الحزمة، التي تحتوي على كائنات tz معدة مسبقًا لجميع المناطق الزمنية، بما في ذلك معلومات إزاحة التوقيت الصيفي.لا أعتقد أن هناك طريقة "لمعرفة فقط" ما إذا كان التوقيت الصيفي قيد التشغيل أم لا بدون البيانات الداعمة ...إنه مدفوع بالتاريخ لمعظم المناطق الزمنية (أو على الأقل المناطق الزمنية التي تدعم التوقيت الصيفي)، وتختلف التواريخ وفقًا للعادات المحلية والسياسة وجميع أنواع الأشياء.

http://labix.org/python-dateutil

نصائح أخرى

أرى بعض المشاكل هنا.

إذا قام المستخدم بإدخال الوقت، فإنه يدخله بالمنطقة الزمنية المحلية، ولكن كيف تعرف أي منطقة زمنية هي؟أوروبا/فيلنيوس أم أوروبا/مدريد؟أو ربما أستراليا/ملبورن؟إذا كنت لا تعرف المنطقة الزمنية، يصبح التاريخ/الوقت "ساذجًا".

قاعدة بيانات المنطقة الزمنية الوحيدة التي يتم أخذها في الاعتبار مناسبة ودقيقة (مع الأخذ في الاعتبار حالة التدفق المستمر) هو Olson timezone db، وهو متاح لـ Python كـ بيتز طَرد.يسمح بتحويل التواريخ/الأوقات بسهولة بين المناطق الزمنية:أولاً، تأخذ التاريخ/الوقت والمنطقة الزمنية من المستخدم، وتوطين التاريخ/الوقت في المنطقة الزمنية للمستخدم، ثم تأخذه على أنه UTC، ويكون جاهزًا للحفظ في قاعدة البيانات الخاصة بك.العرض هو العكس:احصل على التاريخ/الوقت من قاعدة البيانات، وقم بالترجمة إلى التوقيت العالمي الموحد، ثم قم بعرضه حسب المنطقة الزمنية للمستخدم.

وآخر شيء:ليس هناك شيء مثل التحويل التلقائي للتوقيت الصيفي.في حالة التواريخ/الأوقات الغامضة، عليك أن تعرف مسبقًا المنطقة الزمنية التي تم إدخال الوقت فيها.هذا هو واقعنا الإنساني.

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