سؤال

أرغب في معرفة ما إذا كان كائن وقت وتاريخ بايثون معين أقدم من X ساعة أو دقيقة.أحاول أن أفعل شيئًا مشابهًا لـ:

if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes

يؤدي هذا إلى إنشاء خطأ في النوع.

ما هي الطريقة الصحيحة لإجراء مقارنة التاريخ والوقت في بيثون؟لقد نظرت بالفعل WorkWithTime وهو قريب ولكن ليس بالضبط ما أريد.أفترض أنني أريد فقط تمثيل كائن التاريخ والوقت بالثواني حتى أتمكن من إجراء مقارنة int عادية.

يرجى نشر قوائم بأفضل الممارسات الخاصة بالتاريخ والوقت.

هل كانت مفيدة؟

المحلول

استخدم ال datetime.timedelta فصل:

>>> from datetime import datetime, timedelta
>>> then = datetime.now() - timedelta(hours = 2)
>>> now = datetime.now()
>>> (now - then) > timedelta(days = 1)
False
>>> (now - then) > timedelta(hours = 1)
True

يمكن كتابة المثال الخاص بك على النحو التالي:

if (datetime.now() - self.timestamp) > timedelta(seconds = 100)

أو

if (datetime.now() - self.timestamp) > timedelta(minutes = 100)

نصائح أخرى

قارن الفرق مع timedelta الذي قمت بإنشائه:

if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
    print 'older'

بديل:

if (datetime.now() - self.timestamp).total_seconds() > 100:

بافتراض أن self.timestamp هو مثيل للتاريخ والوقت

يمكنك استخدام مجموعة من سمات "الأيام" و"الثواني" للكائن الذي تم إرجاعه لمعرفة الإجابة، مثل هذا:

def seconds_difference(stamp1, stamp2):
    delta = stamp1 - stamp2
    return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.

استخدم abs() في الإجابة إذا كنت تريد دائمًا عددًا موجبًا من الثواني.

لاكتشاف عدد الثواني التي مضت على الطابع الزمني، يمكنك استخدامه على النحو التالي:

if seconds_difference(datetime.datetime.now(), timestamp) < 100:
     pass

يمكنك طرح اثنين التاريخ والوقت الكائنات للعثور على الفرق بينهما.
يمكنك استخدام datetime.fromtimestamp لتحليل الطابع الزمني POSIX.

مثل ذلك:

# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
    print "object is over 100 seconds old"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top