الفرق بين المراجعتين لصفحة: «Python/datetime/timedelta»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الصنف <code>datetime.timedelta()</code> في بايثون}}</noinclude> == البنية العامة == <syntaxhighlight lang="pytho...' |
|||
(2 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:الصنف <code>datetime.timedelta()</code> في بايثون}}</noinclude> | <noinclude>{{DISPLAYTITLE:الصنف <code>datetime.timedelta()</code> في بايثون}}</noinclude> | ||
يمثّل كائن <code>timedelta</code> المدّة الزمنية التي تفصل بين تاريخين أو وقتين معيّنين. | |||
== البنية العامة == | ==البنية العامة== | ||
<syntaxhighlight lang="python3"> | <syntaxhighlight lang="python3"> | ||
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) | datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==المعاملات== | |||
جميع المعاملات في عبارة إنشاء الصنف <code>timedelta</code> اختيارية، وقيمتها الافتراضية تساوي <code>0</code>، ويمكن أن تكون [[Python/int|أعدادًا صحيحة]] أو [[Python/list|ذات فاصلة عائمة]]، ويمكن كذلك أن تكون موجبة أو سالبة. | |||
تُخزّن قيم المعاملات <code>days</code> و <code>seconds</code> و <code>microseconds</code> داخليًا، أما بقية المعاملات فتُحوّل إلى الوحدات التالية: | |||
*تحوّل المللي ثانية إلى <code>1000</code> مايكرو ثانية. | |||
*تحوّل الدقيقة إلى <code>60</code> ثانية. | |||
تُخزّن قيم المعاملات days و seconds و microseconds داخليًا، أما بقية المعاملات فتُحوّل إلى الوحدات التالية: | *تحوّل الساعة إلى <code>3600</code> ثانية. | ||
* تحوّل المللي ثانية إلى 1000 مايكرو ثانية. | *يحوّل الأسبوع إلى <code>7</code> أيام. | ||
* تحوّل الدقيقة إلى 60 ثانية. | |||
* تحوّل الساعة إلى 3600 ثانية. | |||
* يحوّل الأسبوع إلى 7 أيام. | |||
ثم يجري معايرة normalize الأيام والثواني وأجزاء الثواني لتصبح الصيغة الممثلة واحدة، على أن تكون: | ثم يجري معايرة normalize الأيام والثواني وأجزاء الثواني لتصبح الصيغة الممثلة واحدة، على أن تكون: | ||
* 0 <= microseconds < | *<code>0 <= microseconds < 1000000</code> | ||
* 0 <= seconds < 3600*24 (عدد الثواني في اليوم الواحد) | *<code>0 <= seconds < 3600*24</code> (عدد الثواني في اليوم الواحد) | ||
* -999999999 <= days <= | *<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) | ||
سطر 32: | سطر 28: | ||
(-1, 86399, 999999) | (-1, 86399, 999999) | ||
== خصائص الصنف timedelta == | </syntaxhighlight> | ||
==خصائص الصنف timedelta== | |||
يقدم صنف <code>timedelta</code> خصائص الصنف التالية: | |||
<code>timedelta.min</code> | |||
أقل قيمة سالبة للكائن | أقل قيمة سالبة للكائن <code>timedelta</code>، وهي <code>timedelta(-999999999)</code>. | ||
timedelta.max | <code>timedelta.max</code> | ||
timedelta. | أعلى قيمة موجبة للكائن <code>timedelta</code> وهي <code>timedelta(days=999999999, hours=23, minutes=59,seconds=59, microseconds=999999).</code> | ||
<code>timedelta.resolution</code> | |||
أقل قيمة ممكنة للمدة الزمنية التي تفصل بين كائني <code>timedelta</code> غير متساويين <code>timedelta(microseconds=1)</code>. | |||
لاحظ أنّه بسبب عملية المعايرة، فإنّ <code>timedelta.max > -timedelta.min</code>. لا يمكن تمثيل الخاصية <code>-timedelta.max</code> ككائن <code>timedelta</code>. | |||
==خصائص نسخة الصنف timedelta== | |||
'''ملاحظة:''' هذه الخصائص للقراءة فقط. | '''ملاحظة:''' هذه الخصائص للقراءة فقط. | ||
<code>days</code> | |||
عدد الأيام في كائن <code>timedelta</code> وتأخذ القيم من <code>-999999999</code> إلى <code>999999999</code> ضمنيًّا. | |||
<code>seconds</code> | |||
عدد الثواني في كائن <code>timedelta</code>وتأخذ القيم من <code>0</code> إلى <code>86399</code> ضمنيًّا. | |||
<code>microseconds</code> | |||
عدد أجزاء الثواني في كائن <code>timedelta</code> وتأخذ القيم من <code>0</code> إلى <code>999999</code> ضمنيًّا. | |||
== عمليات نسخ الصنف timedelta == | |||
تدعم نسخ الصنف <code>timedelta</code> العمليات الموضّحة في الجدول التالي: | |||
{| class="wikitable" | |||
!العملية | |||
!النتيجة | |||
!ملاحظات | |||
|- | |||
|<code>t1 = t2 + t3</code> | |||
|حاصل جمع <code>t2</code> و <code>t3</code>. بعد ذلك يصبح التعبيران <code>t1 - t2 == t3</code> و <code>t1 - t3 == t2</code> صحيحين. | |||
|(1) | |||
|- | |||
|<code>t1 = t2 - t3</code> | |||
|حاصل طرح <code>t3</code> من <code>t2</code>. بعد ذلك يصبح التعبيران <code>t1 == t2 - t3</code> و <code>t2 == t1 + t3</code> صحيحين. | |||
|(1) | |||
|- | |||
|<code>t1 = t2 * i</code> | |||
أو | |||
<code>t1 = i * t2</code> | |||
|حاصل ضرب كائن <code>timedelta</code> [[Python/int|بعدد صحيح]]. بعد ذلك يصبح التعبير <code>t1 // i == t2</code> صحيحًا، بشرط أن تكون <code>i != 0</code>. | |||
وبصورة عامة فإن التعبير <code>t1 * i == t1 * (i-1) + t1</code> يكون صحيحًا. | |||
|(1) | |||
|- | |||
|<code>t1 = t2 * f</code> | |||
أو | |||
<code>t1 = f * t2</code> | |||
|حاصل ضرب كائن <code>timedelta</code> [[Python/float arithmatics|بعدد عشري ذي فاصلة عائمة]]. تُقرّب النتيجة إلى أقرب مضاعفات <code>timedelta.resolution</code> باستخدام طريقة تقريب النصف إلى أقرب عدد موجب round-half-to-even. | |||
| | |||
|- | |||
|<code>f = t2 / t3</code> | |||
|حاصل قسمة <code>t2</code> على <code>t3</code>، وتعيد العملية كائن <code>[[Python/float|float]]</code>. | |||
|(3) | |||
|- | |||
|<code>t1 = t2 / f</code> | |||
أو | |||
<code>t1 = t2 / i</code> | |||
|حاصل قسمة كائن timedelta على عدد عشري ذي فاصلة عائمة. تُقرّب النتيجة إلى أقرب مضاعفات <code>timedelta.resolution</code> باستخدام طريقة تقريب النصف إلى أقرب عدد موجب round-half-to-even. | |||
| | |||
|- | |||
|<code>t1 = t2 // i</code> | |||
أو | |||
<code>t1 = t2 // t3</code> | |||
|تقرب النتيجة إلى أكبر عدد صحيح سابق، ويجري التخلص من الباقي (إن وجد). | |||
في الحالة الثانية، تعيد العملية [[Python/int|عددًا صحيحًا]]. | |||
|(3) | |||
|- | |||
|<code>t1 = t2 % t3</code> | |||
|يُحسب المتبقي ككائن <code>timedelta</code>. | |||
|(3) | |||
|- | |||
|<code>q, r = divmod(t1, t2)</code> | |||
|يُحسب حاصل القسمة والمتبقي منها: <code>q = t1 // t2</code> و <code>r = t1 % t2</code>. | |||
<code>q</code> عدد صحيح، و <code>r</code> هو كائن <code>timedelta</code>. | |||
|(3) | |||
|- | |||
|<code>+t1</code> | |||
|تعيد العملية كائن <code>timedelta</code> يحمل القيمة نفسها. | |||
|(2) | |||
|- | |||
|<code>-t1</code> | |||
|هذه العملية مكافئة للتعبير <code>(-t1.days, -t1.seconds, -t1.microseconds)</code>و للتعبير <code>t1* -1</code>. | |||
|(4) | |||
|- | |||
|<code>abs(t)</code> | |||
|هذه العملية مكافئة للتعبير <code>+t</code> عندما يكون <code>t.days >= 0</code>، وللتعبير <code>-t</code> عندما يكون <code>t.days < 0. (2)</code>. | |||
|(2) | |||
|- | |||
|<code>str(t)</code> | |||
|تعيد هذه العملية سلسلة نصية تحمل الصيغة <code>[D day[s], ][H]H:MM:SS[.UUUUUU]</code> وتكون <code>D</code> سالبة عندما يكون <code>t</code> سالبًا. | |||
|(5) | |||
|- | |||
|<code>repr(t)</code> | |||
|تعيد هذه العملية تمثيلًا نصّيًا للكائن timedelta كاستدعاء للدالة البانية وتمرير جميع المعاملات مع قيمها الأصلية. | |||
| | |||
|} | |||
''' ملاحظات ''': | ''' ملاحظات ''': | ||
1- النتيجة مضبوطة، ولكن قد تحصل زيادة في بعض الأحيان. | 1- النتيجة مضبوطة، ولكن قد تحصل زيادة في بعض الأحيان. | ||
2- النتيجة مضبوطة، ولا يمكن أن تحصل أي زيادة. | 2- النتيجة مضبوطة، ولا يمكن أن تحصل أي زيادة. | ||
>>> | 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 من اللغة، تدعم كائنات <code>timedelta</code> إجراء القسمة التقريبية أو الحقيقية على بعضها البعض، وتدعم كذلك عمليات باقي القسمة remainder operations و الدالة <code>[[Python/divmod|divmod()]]</code>.إلى جانب ذلك أصبحت كائنات <code>timedelta</code> تدعم عمليات القسم والضرب الحقيقية مع كائنات <code>float</code>. | |||
يمكن إجراء المقارنات بين كائنات <code>timedelta</code>، ويعدّ كائن <code>timedelta</code> الذي يمثّل المدّة الزمنية الأقصر الطرف الأصغر في المقارنة. | |||
يمكن إجراء المقارنات بين كائنات | |||
== | تُطلق اللغة الخطأ <code>TypeError</code> وذلك لمنع عملية المقارنة التي تُعقد بين أنواع مختلفة من التراجع fallback إلى عملية المقارنة الافتراضية والتي تُعقد حسب عنوان الكائن، وتُستثنى من ذلك المقارنة باستخدام العاملين <code>==</code> و <code>!=</code>، حيث تعيد عملية المقارنة القيمتين <code>False</code> و <code>True</code> على التوالي، وتدعم عملية التحويل إلى بايتات (pickling). | ||
يمكن تقطيع hash كائنات <code>timedelta</code> (أي استخدامها كمفاتيح [[Python/list|للقواميس]])، وتدعم pickling، ويحمل كائن <code>timedelta</code> القيمة <code>True</code> في كل الأحوال إلا إذا كان مساويًا للقيمة <code>timedelta(0)</code>. | |||
==توابع نسخة الصنف <code>timedelta</code>== | |||
تقدّم نسخة الصنف <code>timedelta</code> تابعًا واحدًا فقط: | |||
===التابع <code>[[Python/datetime/timedelta/total seconds|timedelta.total_seconds()]]</code>:=== | |||
يعيد التابع عدد الثواني الكلّي في المدّة الزمنية التي يمثّلها كائن <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 قسم timedelta في صفحة Basic date and time types في توثيق بايثون الرسمي.] | |||
[[تصنيف:Python]] | [[تصنيف:Python]] | ||
[[تصنيف:Python Modules]] | [[تصنيف:Python Modules]] | ||
[[تصنيف:Python Methods]] | [[تصنيف:Python Methods]] |
المراجعة الحالية بتاريخ 09:17، 29 يونيو 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
ملاحظة: هذه الخصائص للقراءة فقط.
days
عدد الأيام في كائن timedelta
وتأخذ القيم من -999999999
إلى 999999999
ضمنيًّا.
seconds
عدد الثواني في كائن timedelta
وتأخذ القيم من 0
إلى 86399
ضمنيًّا.
microseconds
عدد أجزاء الثواني في كائن timedelta
وتأخذ القيم من 0
إلى 999999
ضمنيًّا.
عمليات نسخ الصنف timedelta
تدعم نسخ الصنف timedelta
العمليات الموضّحة في الجدول التالي:
العملية | النتيجة | ملاحظات |
---|---|---|
t1 = t2 + t3
|
حاصل جمع t2 و t3 . بعد ذلك يصبح التعبيران t1 - t2 == t3 و t1 - t3 == t2 صحيحين.
|
(1) |
t1 = t2 - t3
|
حاصل طرح t3 من t2 . بعد ذلك يصبح التعبيران t1 == t2 - t3 و t2 == t1 + t3 صحيحين.
|
(1) |
t1 = t2 * i
أو
|
حاصل ضرب كائن timedelta بعدد صحيح. بعد ذلك يصبح التعبير t1 // i == t2 صحيحًا، بشرط أن تكون i != 0 .
وبصورة عامة فإن التعبير |
(1) |
t1 = t2 * f
أو
|
حاصل ضرب كائن timedelta بعدد عشري ذي فاصلة عائمة. تُقرّب النتيجة إلى أقرب مضاعفات timedelta.resolution باستخدام طريقة تقريب النصف إلى أقرب عدد موجب round-half-to-even.
|
|
f = t2 / t3
|
حاصل قسمة t2 على t3 ، وتعيد العملية كائن float .
|
(3) |
t1 = t2 / f
أو
|
حاصل قسمة كائن timedelta على عدد عشري ذي فاصلة عائمة. تُقرّب النتيجة إلى أقرب مضاعفات timedelta.resolution باستخدام طريقة تقريب النصف إلى أقرب عدد موجب round-half-to-even.
|
|
t1 = t2 // i
أو
|
تقرب النتيجة إلى أكبر عدد صحيح سابق، ويجري التخلص من الباقي (إن وجد).
في الحالة الثانية، تعيد العملية عددًا صحيحًا. |
(3) |
t1 = t2 % t3
|
يُحسب المتبقي ككائن timedelta .
|
(3) |
q, r = divmod(t1, t2)
|
يُحسب حاصل القسمة والمتبقي منها: q = t1 // t2 و r = t1 % t2 .
|
(3) |
+t1
|
تعيد العملية كائن timedelta يحمل القيمة نفسها.
|
(2) |
-t1
|
هذه العملية مكافئة للتعبير (-t1.days, -t1.seconds, -t1.microseconds) و للتعبير t1* -1 .
|
(4) |
abs(t)
|
هذه العملية مكافئة للتعبير +t عندما يكون t.days >= 0 ، وللتعبير -t عندما يكون t.days < 0. (2) .
|
(2) |
str(t)
|
تعيد هذه العملية سلسلة نصية تحمل الصيغة [D day[s], ][H]H:MM:SS[.UUUUUU] وتكون D سالبة عندما يكون t سالبًا.
|
(5) |
repr(t)
|
تعيد هذه العملية تمثيلًا نصّيًا للكائن 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
.
انظر أيضًا
- الصنف
datetime.date
في بايثون. - الصنف
datetime.datetime
في بايثون. - الصنف
datetime.time
في بايثون.