شارك المقالة

نستخدم datetime لعرض التاريخ والوقت، وtimedelta لإضافة مدة أو طرحها، ثم نحسب الأيام حتى عيد الميلاد القادم. الفرق بين تاريخ قديم ثابت وتاريخ اليوم لا يعطي دائمًا موعد المناسبة التالية، لذلك نختار السنة الحالية أو التالية حسب مرور اليوم المطلوب.

الكود الكامل باستخدام Python 3

from datetime import date, datetime, timedelta

def next_birthday(month, day, today=None):
    date(2000, month, day)  # Validate month/day, including 29 February.
    today = today or date.today()
    def in_year(year):
        if month == 2 and day == 29:
            try:
                return date(year, month, day)
            except ValueError:
                return date(year, 2, 28)
        return date(year, month, day)
    candidate = in_year(today.year)
    return candidate if candidate >= today else in_year(today.year + 1)

if __name__ == "__main__":
    now = datetime.now()
    print("Local time:", now.strftime("%Y-%m-%d %H:%M:%S"))
    print("One week ago:", now - timedelta(weeks=1))
    print("After 100 days:", now + timedelta(days=100))
    try:
        month = int(input("Birthday month: "))
        day = int(input("Birthday day: "))
        upcoming = next_birthday(month, day)
        print("Next birthday:", upcoming)
        print("Days remaining:", (upcoming - date.today()).days)
    except ValueError as error:
        print("Invalid date:", error)

الوقت المحلي والتاريخ

تعيد datetime.now الوقت المحلي للجهاز دون منطقة زمنية صريحة في هذا المثال، وتتيح strftime تنسيق النتيجة. استخدم date عندما تقارن أيامًا فقط حتى لا يغير جزء الساعة عدد الأيام المتبقية. timedelta(weeks=1) يمثل سبعة أيام، وليس شهرًا تقويميًا.

سياسة يوم 29 فبراير

إذا ولد الشخص في 29 فبراير فالمثال يعتبر المناسبة في 28 فبراير خلال السنة غير الكبيسة. هذه سياسة تطبيق موضحة ويمكن تعديلها إلى 1 مارس؛ لا توجد محاولة لإنشاء تاريخ غير صالح ثم تجاهل الخطأ. نستخدم السنة 2000 في التحقق الأولي لأنها كبيسة.

الحالات التي يجب تجربتها

إذا كانت المناسبة اليوم فالنتيجة صفر أيام، وإذا مر موعدها ننتقل إلى السنة التالية. جرّب 31 أبريل لتتأكد من ظهور رسالة تاريخ غير صالح. لا تكتب رقم اليوم 04 في Python 3؛ الأعداد العشرية لا تقبل صفرًا بادئًا بهذه الصيغة. تم أيضًا ضبط الأقواس في أمثلة الطباعة حتى يعمل الكود عند نسخه.

الصور والفيديو المرفقان بالدرس

مصادر المثال السابق: pythonforbeginners

شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع