بيتز:لماذا هناك حاجة للتطبيع عند التحويل بين المناطق الزمنية؟

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

  •  07-07-2019
  •  | 
  •  

سؤال

أنا أقرأ ليست كاملة جدا وثائق بيتز وأنا عالق في فهم جزء واحد منه.

يحتاج التحويل بين المناطق الزمنية أيضًا إلى اهتمام خاص.يحتاج هذا أيضًا إلى استخدام طريقة التطبيع للتأكد من صحة التحويل.

>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
>>> utc_dt.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> au_tz = timezone('Australia/Sydney')
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
>>> au_dt.strftime(fmt)
'2006-03-27 08:34:59 EST+1100'
>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
>>> utc_dt2.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'

حاولت هذا المثال بالذات بدون استخدام normalize واتضح نفس الشيء.في رأيي هذا المثال لا يفسر حقا لماذا علينا أن نستخدم normalize عند التحويل بين datetime كائنات في مناطق زمنية مختلفة.

هل من الممكن أن يعطيني شخص ما مثال (مثل ما هو مذكور أعلاه) حيث تختلف النتيجة عند عدم الاستخدام normalize.

شكرًا

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

المحلول

من وثائق pytz :

بالإضافة إلى ذلك، إذا قمت بإجراء حساب التاريخ في الأوقات المحلية التي تتجاوز حدود التوقيت الصيفي، فقد تكون النتائج في منطقة زمنية غير صحيحة (على سبيل المثال.اطرح دقيقة واحدة من 2002-10-27 1:00 بتوقيت شرق الولايات المتحدة وستحصل على 2002-10-27 0:59 بتوقيت شرق الولايات المتحدة بدلاً من 2002-10-27 الصحيح 1:59 بتوقيت شرق الولايات المتحدة).يتم توفير طريقة تطبيع () لتصحيح هذا.لسوء الحظ، لا يمكن حل هذه المشكلات دون تعديل تنفيذ وقت وتاريخ Python.

نصائح أخرى

تقول المستندات أن التطبيع يُستخدم كحل بديل لمشكلات التوقيت الصيفي:

بالإضافة إلى ذلك، إذا قمت بإجراء حساب التاريخ في الأوقات المحلية التي تتجاوز حدود التوقيت الصيفي، فقد تكون النتائج في منطقة زمنية غير صحيحة (على سبيل المثال.اطرح دقيقة واحدة من 2002-10-27 1:00 بتوقيت شرق الولايات المتحدة وستحصل على 2002-10-27 0:59 بتوقيت شرق الولايات المتحدة بدلاً من 2002-10-27 الصحيح 1:59 بتوقيت شرق الولايات المتحدة).يتم توفير طريقة تطبيع () لتصحيح هذا.

لذلك يتم استخدامه لتصحيح بعض حالات الحافة التي تتضمن التوقيت الصيفي.إذا كنت لا تستخدم المناطق الزمنية DST (على سبيل المثال.UTC) فليس من الضروري استخدام التطبيع.

إذا لم تستخدمه، فمن المحتمل أن يتم إيقاف التحويل لمدة ساعة واحدة في ظل ظروف معينة.

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