python - على - قواعد لغة بايثون




ما هي أبسط طريقة للعثور على الفرق بين 2 مرات في الثعبان؟ (5)

لدي 2 قيم الوقت التي لديها نوع datetime.time . أريد أن أجد الفرق بينهما. الشيء الواضح الذي يجب القيام به هو t1 - t2، ولكن هذا لا يعمل. وهو يعمل للكائنات من نوع datetime.datetime ولكن ليس ل datetime.time . فما هي أفضل طريقة للقيام بذلك؟


أولا، لاحظ أن datetime.time هو وقت من اليوم، مستقلة عن يوم معين، وبالتالي فإن الفرق بين أي قيم datetime.time اثنين ستكون أقل من 24 ساعة.

نهج واحد هو تحويل كل من قيم datetime.time إلى قيم قابلة للمقارنة (مثل ميلي ثانية)، والعثور على الفرق.

t1, t2 = datetime.time(...), datetime.time(...)

t1_ms = (t1.hour*60*60 + t1.minute*60 + t1.second)*1000 + t1.microsecond
t2_ms = (t2.hour*60*60 + t2.minute*60 + t2.second)*1000 + t2.microsecond

delta_ms = max([t1_ms, t2_ms]) - min([t1_ms, t2_ms])

انها عرجاء قليلا، لكنه يعمل.


أيضا سخيفة قليلا، ولكن هل يمكن محاولة اختيار يوم تعسفي ودمج كل مرة في ذلك، وذلك باستخدام datetime.datetime.combine ، ثم طرح:

>>> import datetime
>>> t1 = datetime.time(2,3,4)
>>> t2 = datetime.time(18,20,59)
>>> dummydate = datetime.date(2000,1,1)
>>> datetime.datetime.combine(dummydate,t2) - datetime.datetime.combine(dummydate,t1)
datetime.timedelta(0, 58675)

استرداد مرات في ميلي ثانية ثم القيام الطرح.


بيثون ديه بيتس ( http://pytz.sourceforge.net ) وحدة التي يمكن استخدامها لحسابات من "الوقت" الكائنات. فإنه يعتني تعويضات دست أيضا. تحتوي الصفحة أعلاه على عدد من الأمثلة التي توضح استخدام بيتس.


هل يمكن تحويل كل من الكائنات تيمدلتا وطرح هذه من بعضها البعض، والتي سوف تأخذ الرعاية من الحمل المبالغ. فمثلا:

>>> import datetime as dt
>>> t1 = dt.time(23, 5, 5, 5)
>>> t2 = dt.time(10, 5, 5, 5)
>>> dt1 = dt.timedelta(hours=t1.hour, minutes=t1.minute, seconds=t1.second, microseconds=t1.microsecond)
>>> dt2 = dt.timedelta(hours=t2.hour, minutes=t2.minute, seconds=t2.second, microseconds=t2.microsecond)
>>>  print(dt1-dt2)
13:00:00
>>> print(dt2-dt1)
-1 day, 11:00:00
>>> print(abs(dt2-dt1))
13:00:00

الكائنات تيمدلتا السلبية في بيثون الحصول على حقل يوم سلبي، مع حقول أخرى إيجابية. هل يمكن التحقق مسبقا: يعمل مقارنة على كل من الكائنات الوقت والأشياء تيمدلتا:

>>> dt2 < dt1
True
>>> t2 < t1
True




time