أصبحت مواعيد بايثون سهلة.
يدعم بايثون 3.8 وأحدث .
>>> استيراد البندول >>> now_in_paris = pendulum.now('Europe/Paris')>>> now_in_paris'2016-07-04T00:49:58.502116+02:00'# تبديل سلس للمنطقة الزمنية >>> now_in_paris.in_timezone('UTC')'2016-07-03T22:49:58.502116+00:00'>>> غدًا = pendulum.now().add(days=1)>>> last_week = pendulum.now() .subtract(weeks=1)>>> الماضي = البندول.now().subtract(دقيقة=2)>>> Past.diff_for_humans()'منذ دقيقتين'>>> delta = last - last_week>>> delta.hours23>>> delta.in_words(locale='en')'6 أيام 23 ساعة 58 دقيقة'# التعامل الصحيح مع التاريخ والوقت التطبيع >>> البندول.تاريخ الوقت(2013, 3, 31, 2, 30, tz='Europe/Paris')'2013-03-31T03:30:00+02:00' # 2:30 غير موجود (الوقت الذي تم تخطيه)# التعامل الصحيح مع انتقالات التوقيت الصيفي >>> just_before = pendulum.datetime(2013) , 3, 31, 1, 59, 59, 999999, tz='أوروبا/باريس')'2013-03-31T01:59:59.999999+01:00'>>> just_before.add(microthans=1)'2013-03-31T03:00:00+02:00'
الموقع الرسمي
التوثيق
تعقب المشكلة
تعد مثيلات datetime
الأصلية كافية للحالات الأساسية، ولكن عندما تواجه حالات استخدام أكثر تعقيدًا، فغالبًا ما تظهر قيودًا وليس من السهل التعامل معها. يوفر Pendulum
واجهة برمجة تطبيقات أكثر نظافة وسهولة في الاستخدام مع الاستمرار في الاعتماد على المكتبة القياسية. لذلك لا يزال datetime
ولكن أفضل.
على عكس مكتبات التاريخ والوقت الأخرى لـ Python، يعد البندول بديلاً مباشرًا لفئة datetime
القياسية (ترث منها)، لذلك، يمكنك بشكل أساسي استبدال جميع مثيلات datetime
بمثيلات DateTime
في التعليمات البرمجية الخاصة بك (توجد استثناءات للمكتبات التي تتحقق من نوع الكائنات باستخدام وظيفة type
مثل sqlite3
أو PyMySQL
على سبيل المثال).
كما أنه يزيل فكرة أوقات التاريخ الساذجة: كل مثيل Pendulum
يكون مدركًا للمنطقة الزمنية وبشكل افتراضي بالتوقيت UTC
لسهولة الاستخدام.
يعمل البندول أيضًا على تحسين فئة timedelta
القياسية من خلال توفير أساليب وخصائص أكثر سهولة.
على الرغم من أن فئة DateTime
هي فئة فرعية من datetime
إلا أن هناك بعض الحالات النادرة حيث لا يمكنها استبدال الفئة الأصلية مباشرةً. فيما يلي قائمة (غير شاملة) بالحالات المبلغ عنها مع الحل المحتمل، إن وجد:
سيستخدم sqlite3
الدالة type()
لتحديد نوع الكائن افتراضيًا. للتغلب على هذه المشكلة، يمكنك تسجيل محول جديد:
من البندول استيراد DateTimefrom sqlite3 import Register_adapterregister_adapter(DateTime, lambda val: val.isoformat(' '))
سيستخدم mysqlclient
( MySQLdb
سابقًا) و PyMySQL
الدالة type()
لتحديد نوع الكائن افتراضيًا. للتغلب على هذه المشكلة، يمكنك تسجيل محول جديد:
استيراد MySQLdb.convertersimport pymysql.convertersfrom البندول استيراد DateTimeMySQLdb.converters.conversions[DateTime] = MySQLdb.converters.DateTime2literalpymysql.converters.conversions[DateTime] = pymysql.converters.escape_datetime
سيستخدم django
طريقة isoformat()
لتخزين أوقات التاريخ في قاعدة البيانات. ومع ذلك، نظرًا لأن pendulum
دائمًا على علم بالمنطقة الزمنية، فسيتم دائمًا إرجاع معلومات الإزاحة بواسطة isoformat()
مما يؤدي إلى ظهور خطأ، على الأقل بالنسبة لقواعد بيانات MySQL. للتغلب على هذه المشكلة، يمكنك إما إنشاء DateTimeField
الخاص بك أو استخدام الحل البديل السابق لـ MySQLdb
:
من django.db.models استيراد DateTimeField كـ BaseDateTimeFieldfrom البندول استيراد DateTimeclass DateTimeField(BaseDateTimeField):def value_to_string(self, obj):val = self.value_from_object(obj)if isinstance(value, DateTime):return value.to_datetime_string()return ' 'إذا كانت val لا شيء آخر val.isoformat()
المساهمات هي موضع ترحيب، وخاصة مع الترجمة.
للعمل على قاعدة بيانات البندول، ستحتاج إلى استنساخ المشروع محليًا وتثبيت التبعيات المطلوبة عبر الشعر.
$ git clone [email protected]:sdispater/pendulum.git $ تثبيت الشعر
إذا كنت تريد المساعدة في الترجمة، فهناك حالتان مختلفتان: اللغة موجودة بالفعل أم لا.
إذا لم تكن الإعدادات المحلية موجودة، فستحتاج إلى إنشائها باستخدام الأداة المساعدة clock
:
لغة ./clock قم بإنشاء <your-locale>
سيقوم بإنشاء دليل في pendulum/locales
المسماة باسم منطقتك، بالبنية التالية:
<اللغة المحلية الخاصة بك>/
- custom.py
- locale.py
لا يجب تعديل الملف locale.py
. أنه يحتوي على الترجمات المقدمة من قاعدة بيانات CLDR.
الملف custom.py
هو الملف الذي تريد تعديله. أنه يحتوي على البيانات التي يحتاجها البندول والتي لا توفرها قاعدة بيانات CLDR. يمكنك أخذ البيانات كمرجع لمعرفة البيانات المطلوبة.
يجب عليك أيضًا إضافة اختبارات للغة التي تم إنشاؤها أو تعديلها.