التابع datetime.time()‎ في بايثون

من موسوعة حسوب
< Python‏ | datetime‏ | tzinfo
مراجعة 20:28، 10 يوليو 2018 بواسطة Mohammed Taher (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:التابع <code>datetime.time()‎</code> في بايثون}}</noinclude> يستدعى هذا التابع عند استخدام التاب...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)


يستدعى هذا التابع عند استخدام التابع datetime.astimezone()‎ بالطريقة الافتراضية. وعند استدعائه من هناك، يكون dt.tzinfo هو الكائن نفسه self، ويُنظر إلى بيانات التاريخ والوقت في الكائن dt على أنّها تعرض الوقت حسب التوقيت العالمي المنسّق.

البنية العامة

tzinfo.fromutc(dt)

الهدف من التابع formutc()‎ هو تعديل بيانات الوقت والتاريخ وإعادة كائن datetime مكافئ حسب التوقيت المحليّ للكائن نفسه self.

يجب على الأصناف الفرعية من tzinfo أن تكون قادرةً على وراثة طريقة الاستخدام الافتراضية للتابع fromutc()‎ دون أي مشاكل، وذلك لأنّ هذا التابع قادرٌ على التعامل مع حالات مثل المناطق الزمنية ذات مقدار الإزاحة الثابتة، والمناطق الزمنية التي تعتمد التوقيتين المعياري والصيفي، أو التوقيت الصيفي حتى عندما تكون أوقات الانتقال في النظام الصيفي مختلفة من سنة إلى أخرى.

ولكن قد لا يمكن للطريقة الافتراضية في استخدام التابع fromutc()‎ أن تتعامل مع بعض الحالات على نحو صحيح، فمثلًا عندما لا يعتمد مقدار الإزاحة المعياري عن التوقيت العالمي المنسّق على تاريخ أو وقت معين، وهو أمر قد يحدث لأسباب سياسية. ما يحدث هنا هو أنّ الطريقة الافتراضية لاستخدام التابعين astimezone()‎ و fromutc()‎ قد لا تنتج النتائج المطلوبة إن كانت النتيجة إحدى الساعات التي تكون في اللحظة التي يحدث بها تغير في مقدار الإزاحة المعياري.

أمثلة

لو تجاوزنا الحالات التي تنشأ عنها الأخطاء فإنّ الطريقة الافتراضية لاستخدام التابع fromutc()‎ هي:

def fromutc(self, dt):
	# يطلق الخطأ ValueError إن لم يكن dt.tzinfo هو self
    dtoff = dt.utcoffset()
    dtdst = dt.dst()
	# يطلق الخطأ ValueError إن لم يكن dtoff هو None أو لم يكن dtdst هو None
    delta = dtoff - dtdst  # هذا هو مقدار الإزاحة المعياري للكائن نفسه
    if delta:
        dt += delta   # التحويل إلى التوقيت المحلي المعياري
        dtdst = dt.dst()
        # يطلق الخطأ ValueError إن كان dtdst يحمل القيمة None
    if dtdst:
        return dt + dtdst
    else:
        return dt

انظر أيضًا

مصادر

قسم tzinfo Objects في صفحة Basic date and time types في توثيق بايثون الرسمي.