الفرق بين المراجعتين لصفحة: «Python/datetime/timedelta»

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الصنف <code>datetime.timedelta()‎</code> في بايثون}}</noinclude> == البنية العامة == <syntaxhighlight lang="pytho...'
 
لا ملخص تعديل
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الصنف <code>datetime.timedelta()‎</code> في بايثون}}</noinclude>
<noinclude>{{DISPLAYTITLE:الصنف <code>datetime.timedelta()‎</code> في بايثون}}</noinclude>


 
يمثّل كائن <code>timedelta</code> المدّة الزمنية التي تفصل بين تاريخين أو وقتين معيّنين.
== البنية العامة ==
== البنية العامة ==


سطر 9: سطر 9:


== المعاملات ==
== المعاملات ==
جميع المعاملات في عبارة إنشاء الصنف timedelta اختيارية، وقيمتها الافتراضية تساوي ويمكن أن تكون أعدادًا صحيحة أو ذات فاصلة عائمة، ويمكن كذلك أن تكون موجبة أو سالبة.
جميع المعاملات في عبارة إنشاء الصنف <code>timedelta</code> اختيارية، وقيمتها الافتراضية تساوي <code>0</code>، ويمكن أن تكون [[Python/int|أعدادًا صحيحة]] أو [[Python/list|ذات فاصلة عائمة]]، ويمكن كذلك أن تكون موجبة أو سالبة.


تُخزّن قيم المعاملات days و seconds و microseconds داخليًا، أما بقية المعاملات فتُحوّل إلى الوحدات التالية:
تُخزّن قيم المعاملات <code>days</code> و <code>seconds</code> و <code>microseconds</code> داخليًا، أما بقية المعاملات فتُحوّل إلى الوحدات التالية:
* تحوّل المللي ثانية إلى 1000 مايكرو ثانية.
* تحوّل المللي ثانية إلى <code>1000</code> مايكرو ثانية.
* تحوّل الدقيقة إلى 60 ثانية.
* تحوّل الدقيقة إلى <code>60</code> ثانية.
* تحوّل الساعة إلى 3600 ثانية.
* تحوّل الساعة إلى <code>3600</code> ثانية.
* يحوّل الأسبوع إلى 7 أيام.
* يحوّل الأسبوع إلى <code>7</code> أيام.


ثم يجري معايرة normalize الأيام والثواني وأجزاء الثواني لتصبح الصيغة الممثلة واحدة، على أن تكون:
ثم يجري معايرة normalize الأيام والثواني وأجزاء الثواني لتصبح الصيغة الممثلة واحدة، على أن تكون:
* 0 <= microseconds < 1000000
* ‎<code>0 <= microseconds < 1000000‎</code>
* 0 <= seconds < 3600*24 (عدد الثواني في اليوم الواحد)
* ‎<code>0 <= seconds < 3600*24</code> (عدد الثواني في اليوم الواحد)
* -999999999 <= days <= 999999999
* ‎<code>-999999999 <= days <= 999999999‎</code>


إن استخدمت الأعداد ذات الفاصلة العائمة في أيّ من المعاملات، وكان هناك عدد من أجزاء الثانية الكسرية، تُدمج أجزاء الثواني المتبّقية من جميع المعاملات وتقرّب قيمة مجموعها إلى أقرب جزء من الثانية باعتماد طريقة تقريب النصف إلى أقرب عدد زوجي round-half-to-even. وفي حال كانت جميع المعاملات أعدادًا صحيحة تكون نواتج عملية التحويل والمعايرة مضبوطة (ولن يكون هناك أي فقدان للمعلومات).
إن استخدمت الأعداد ذات الفاصلة العائمة في أيّ من المعاملات، وكان هناك عدد من أجزاء الثانية الكسرية، تُدمج أجزاء الثواني المتبّقية من جميع المعاملات وتقرّب قيمة مجموعها إلى أقرب جزء من الثانية باعتماد طريقة تقريب النصف إلى أقرب عدد زوجي round-half-to-even. وفي حال كانت جميع المعاملات أعدادًا صحيحة تكون نواتج عملية التحويل والمعايرة مضبوطة (ولن يكون هناك أي فقدان للمعلومات).


إن كانت قيمة الأيام التي جرت معايرتها خارج النطاق المحدّد، تطلق اللغة الخطأ OverflowError.
إن كانت قيمة الأيام التي جرت معايرتها خارج النطاق المحدّد، تطلق اللغة الخطأ <code>OverflowError</code>.
لاحظ أنّ معايرة القيم السالبة قد تعطي نتائج غير متوقعة، فمثلًا:


لاحظ أنّ معايرة القيم السالبة قد تعطي نتائج غير متوقعة، فمثلًا:<syntaxhighlight lang="python3">
>>> from datetime import timedelta
>>> from datetime import timedelta
>>> d = timedelta(microseconds=-1)
>>> d = timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds)
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
(-1, 86399, 999999)
</syntaxhighlight>


== خصائص الصنف timedelta ==
== خصائص الصنف timedelta ==


يقدم صنف <code>timedelta</code> خصائص الصنف التالية:
يقدم صنف <code>timedelta</code> خصائص الصنف التالية:
timedelta.min


أقل قيمة سالبة للكائن timedelta، وهي timedelta(-999999999)‎.
<code>timedelta.min</code>
 
أقل قيمة سالبة للكائن <code>timedelta</code>، وهي <code>timedelta(-999999999)</code>‎.
 
<code>timedelta.max</code>
 
أعلى قيمة موجبة للكائن <code>timedelta</code> وهي <code>timedelta(days=999999999, hours=23, minutes=59,seconds=59, microseconds=999999)‎.</code>


timedelta.max
<code>timedelta.resolution</code>
أعلى قيمة موجبة للكائن timedelta وهي timedelta(days=999999999, hours=23, minutes=59,seconds=59, microseconds=999999)‎.


timedelta.resolution
أقل قيمة ممكنة للمدة الزمنية التي تفصل بين كائني <code>timedelta</code> غير متساويين <code>timedelta(microseconds=1)</code>‎.


أقل قيمة ممكنة للمدة الزمنية التي تفصل بين كائني timedelta غير متساويين timedelta(microseconds=1)‎.
لاحظ أنّه بسبب عملية المعايرة، فإنّ <code>timedelta.max > -timedelta.min</code>. لا يمكن تمثيل الخاصية <code>‎-timedelta.max</code> ككائن <code>timedelta</code>.
لاحظ أنّه بسبب عملية المعايرة، فإنّ timedelta.max > -timedelta.min. لا يمكن تمثيل الخاصية ‎-timedelta.max ككائن timedelta.


== خصائص نسخة الصنف timedelta ==
== خصائص نسخة الصنف timedelta ==
سطر 56: سطر 61:


1- النتيجة مضبوطة، ولكن قد تحصل زيادة في بعض الأحيان.
1- النتيجة مضبوطة، ولكن قد تحصل زيادة في بعض الأحيان.
2- النتيجة مضبوطة، ولا يمكن أن تحصل أي زيادة.
2- النتيجة مضبوطة، ولا يمكن أن تحصل أي زيادة.
3- القسم على 0 تؤدي إلى إطلاق الخطأ ZeroDivisionError.
4- يمكن تمثيل الخاصية ‎-timedelta.max ككائن timedelta.
5- تجري معايرة السلاسل النصية التي تمثّل كائنات timedelta بنفس طريقة معايرة صيغة التمثيل الداخلية، ويؤدي هذا إلى الحصول على بعض النتائج غير المتوقّعة مع القيم السالبة لكائنات timedelta. فمثلًا:


>>>
3- القسمة على <code>0</code> تؤدي إلى إطلاق الخطأ <code>ZeroDivisionError</code>.
 
4- يمكن تمثيل الخاصية <code>‎-timedelta.max</code> ككائن <code>timedelta</code>.
 
5- تجري معايرة [[Python/str|السلاسل النصية]] التي تمثّل كائنات <code>timedelta</code> بنفس طريقة معايرة صيغة التمثيل الداخلية، ويؤدي هذا إلى الحصول على بعض النتائج غير المتوقّعة مع القيم السالبة لكائنات <code>timedelta</code>. فمثلًا:<syntaxhighlight lang="python3">
>>> timedelta(hours=-5)
>>> timedelta(hours=-5)
datetime.timedelta(days=-1, seconds=68400)
datetime.timedelta(days=-1, seconds=68400)
>>> print(_)
>>> print(_)
-1 day, 19:00:00
-1 day, 19:00:00
</syntaxhighlight>


'''ملاحظة''': في الإصدار 3.2 من اللغة، تدعم كائنات timedelta إجراء القسمة التقريبية أو الحقيقية على بعضها البعض، وتدعم كذلك عمليات باقي القسمة remainder operations و الدالة divmod()‎.إلى جانب ذلك أصبحت كائنات timedelta تدعم عمليات القسم والضرب الحقيقية مع كائنات float.
'''ملاحظة''': في الإصدار 3.2 من اللغة، تدعم كائنات <code>timedelta</code> إجراء القسمة التقريبية أو الحقيقية على بعضها البعض، وتدعم كذلك عمليات باقي القسمة remainder operations و الدالة <code>[[Python/divmod|divmod()‎]]</code>.إلى جانب ذلك أصبحت كائنات <code>timedelta</code> تدعم عمليات القسم والضرب الحقيقية مع كائنات <code>float</code>.


يمكن إجراء المقارنات بين كائنات timedelta، ويعدّ كائن timedelta الذي يمثّل المدّة الزمنية الأقصر الطرف الأصغر في المقارنة.  
يمكن إجراء المقارنات بين كائنات <code>timedelta</code>، ويعدّ كائن <code>timedelta</code> الذي يمثّل المدّة الزمنية الأقصر الطرف الأصغر في المقارنة.  


تُطلق اللغة الخطأ TypeError وذلك لمنع عملية المقارنة التي تُعقد بين أنواع مختلفة من التراجع fallback إلى عملية المقارنة الافتراضية والتي تُعقد حسب عنوان الكائن، وتُستثنى من ذلك المقارنة باستخدام العاملين == و ‎!‎=‎، حيث تعيد عملية المقارنة القيمتين False و True على التوالي، وتدعم عملية التحويل إلى بايتات (pickling)  
تُطلق اللغة الخطأ <code>TypeError</code> وذلك لمنع عملية المقارنة التي تُعقد بين أنواع مختلفة من التراجع fallback إلى عملية المقارنة الافتراضية والتي تُعقد حسب عنوان الكائن، وتُستثنى من ذلك المقارنة باستخدام العاملين <code>==</code> و <code>‎!‎=</code>‎، حيث تعيد عملية المقارنة القيمتين <code>False</code> و <code>True</code> على التوالي، وتدعم عملية التحويل إلى بايتات (pickling).


يمكن تقطيع hash كائنات timedelta (أي استخدامها كمفاتيح للقواميس)، وتدعم pickling، ويحمل كائن timedelta القيمة True في كل الأحوال إلا إذا كان مساويًا للقيمة timedelta(0)‎.
يمكن تقطيع hash كائنات <code>timedelta</code> (أي استخدامها كمفاتيح [[Python/list|للقواميس]])، وتدعم pickling، ويحمل كائن <code>timedelta</code> القيمة <code>True</code> في كل الأحوال إلا إذا كان مساويًا للقيمة <code>timedelta(0)‎</code>.


== توابع نسخة الصنف timedelta ==  
== توابع نسخة الصنف timedelta ==  
تقدّم نسخة الصنف timedelta تابعًا واحدًا فقط:
تقدّم نسخة الصنف <code>timedelta</code> تابعًا واحدًا فقط:


=== التابع timedelta.total_seconds(): ===
=== التابع <code>timedelta.total_seconds()‎</code>: ===


يعيد التابع عدد الثواني الكلّي في المدّة الزمنية التي يمثّلها كائن timedelta.
يعيد التابع عدد الثواني الكلّي في المدّة الزمنية التي يمثّلها كائن <code>timedelta</code>.


== انظر أيضًا ==
== انظر أيضًا ==
* الصنف <code>[[Python/datetime/date|datetime.date]]</code> في بايثون.
* الصنف <code>[[Python/datetime/datetime|datetime.datetime]]</code> في بايثون.
* الصنف <code>[[Python/datetime/time|datetime.time]]</code> في بايثون.


== مصادر ==
== مصادر ==
[https://docs.python.org/3/library/datetime.html#datetime.timedelta قسم date Objects في صفحة Basic date and time types في توثيق بايثون الرسمي.]
[https://docs.python.org/3/library/datetime.html#datetime.timedelta قسم timedelta في صفحة Basic date and time types في توثيق بايثون الرسمي.]


[[تصنيف:Python]]
[[تصنيف:Python]]
[[تصنيف:Python Modules]]
[[تصنيف:Python Modules]]
[[تصنيف:Python Methods]]
[[تصنيف:Python Methods]]

مراجعة 18:53، 28 يونيو 2018


يمثّل كائن timedelta المدّة الزمنية التي تفصل بين تاريخين أو وقتين معيّنين.

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

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

المعاملات

جميع المعاملات في عبارة إنشاء الصنف timedelta اختيارية، وقيمتها الافتراضية تساوي 0، ويمكن أن تكون أعدادًا صحيحة أو ذات فاصلة عائمة، ويمكن كذلك أن تكون موجبة أو سالبة.

تُخزّن قيم المعاملات days و seconds و microseconds داخليًا، أما بقية المعاملات فتُحوّل إلى الوحدات التالية:

  • تحوّل المللي ثانية إلى 1000 مايكرو ثانية.
  • تحوّل الدقيقة إلى 60 ثانية.
  • تحوّل الساعة إلى 3600 ثانية.
  • يحوّل الأسبوع إلى 7 أيام.

ثم يجري معايرة normalize الأيام والثواني وأجزاء الثواني لتصبح الصيغة الممثلة واحدة، على أن تكون:

  • 0 <= microseconds < 1000000‎
  • 0 <= seconds < 3600*24 (عدد الثواني في اليوم الواحد)‎
  • -999999999 <= days <= 999999999‎

إن استخدمت الأعداد ذات الفاصلة العائمة في أيّ من المعاملات، وكان هناك عدد من أجزاء الثانية الكسرية، تُدمج أجزاء الثواني المتبّقية من جميع المعاملات وتقرّب قيمة مجموعها إلى أقرب جزء من الثانية باعتماد طريقة تقريب النصف إلى أقرب عدد زوجي round-half-to-even. وفي حال كانت جميع المعاملات أعدادًا صحيحة تكون نواتج عملية التحويل والمعايرة مضبوطة (ولن يكون هناك أي فقدان للمعلومات).

إن كانت قيمة الأيام التي جرت معايرتها خارج النطاق المحدّد، تطلق اللغة الخطأ OverflowError.

لاحظ أنّ معايرة القيم السالبة قد تعطي نتائج غير متوقعة، فمثلًا:

>>> from datetime import timedelta
>>> d = timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)

خصائص الصنف timedelta

يقدم صنف timedelta خصائص الصنف التالية:

timedelta.min

أقل قيمة سالبة للكائن timedelta، وهي timedelta(-999999999)‎.

timedelta.max

أعلى قيمة موجبة للكائن timedelta وهي timedelta(days=999999999, hours=23, minutes=59,seconds=59, microseconds=999999)‎.

timedelta.resolution

أقل قيمة ممكنة للمدة الزمنية التي تفصل بين كائني timedelta غير متساويين timedelta(microseconds=1)‎.

لاحظ أنّه بسبب عملية المعايرة، فإنّ timedelta.max > -timedelta.min. لا يمكن تمثيل الخاصية ‎-timedelta.max ككائن timedelta.

خصائص نسخة الصنف timedelta

ملاحظة: هذه الخصائص للقراءة فقط.


ملاحظات :

1- النتيجة مضبوطة، ولكن قد تحصل زيادة في بعض الأحيان.

2- النتيجة مضبوطة، ولا يمكن أن تحصل أي زيادة.

3- القسمة على 0 تؤدي إلى إطلاق الخطأ ZeroDivisionError.

4- يمكن تمثيل الخاصية ‎-timedelta.max ككائن timedelta.

5- تجري معايرة السلاسل النصية التي تمثّل كائنات timedelta بنفس طريقة معايرة صيغة التمثيل الداخلية، ويؤدي هذا إلى الحصول على بعض النتائج غير المتوقّعة مع القيم السالبة لكائنات timedelta. فمثلًا:

>>> timedelta(hours=-5)
datetime.timedelta(days=-1, seconds=68400)
>>> print(_)
-1 day, 19:00:00

ملاحظة: في الإصدار 3.2 من اللغة، تدعم كائنات timedelta إجراء القسمة التقريبية أو الحقيقية على بعضها البعض، وتدعم كذلك عمليات باقي القسمة remainder operations و الدالة divmod()‎.إلى جانب ذلك أصبحت كائنات timedelta تدعم عمليات القسم والضرب الحقيقية مع كائنات float.

يمكن إجراء المقارنات بين كائنات timedelta، ويعدّ كائن timedelta الذي يمثّل المدّة الزمنية الأقصر الطرف الأصغر في المقارنة.

تُطلق اللغة الخطأ TypeError وذلك لمنع عملية المقارنة التي تُعقد بين أنواع مختلفة من التراجع fallback إلى عملية المقارنة الافتراضية والتي تُعقد حسب عنوان الكائن، وتُستثنى من ذلك المقارنة باستخدام العاملين == و ‎!‎=‎، حيث تعيد عملية المقارنة القيمتين False و True على التوالي، وتدعم عملية التحويل إلى بايتات (pickling).

يمكن تقطيع hash كائنات timedelta (أي استخدامها كمفاتيح للقواميس)، وتدعم pickling، ويحمل كائن timedelta القيمة True في كل الأحوال إلا إذا كان مساويًا للقيمة timedelta(0)‎.

توابع نسخة الصنف timedelta

تقدّم نسخة الصنف timedelta تابعًا واحدًا فقط:

التابع timedelta.total_seconds()‎:

يعيد التابع عدد الثواني الكلّي في المدّة الزمنية التي يمثّلها كائن timedelta.

انظر أيضًا

مصادر

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