פוסט

טיפוס התאריך ב-Python

איך עובדים עם תאריכים ב-Python בעזרת datetime.date: יצירת תאריך, קריאת חלקים ממנו, עיצוב עם strftime ו-isoformat, חישובים עם timedelta, ותאריכים לא חוקיים.

ל-Python אין ערך תאריך מובנה כמו int או str. תאריכים נמצאים בספרייה הסטנדרטית datetime, והטיפוס שבדרך כלל צריך הוא date. date מחזיק שנה, חודש ויום, ולא יותר: בלי שעה ובלי אזור זמן. לשעה משתמשים ב-datetime, נושא נפרד.

כל דוגמה כאן הורצה עם Python 3.13. ההתנהגות נבדקה מול התיעוד הרשמי של אובייקטי date.

יצירת תאריך

מייבאים את המחלקה, ומעבירים שנה, חודש ויום כמספרים שלמים:

from datetime import date

d = date(2026, 10, 11)
print(d)
print(repr(d))
2026-10-11
datetime.date(2026, 10, 11)

print מציג בפורמט ISO (YYYY-MM-DD). repr מציג איך היה נכתב האובייקט בקוד.

שלושת הארגומנטים חובה, וכל אחד חייב להיות בטווח (חודש 1 עד 12, יום 1 עד אורך החודש). אחרת מקבלים ValueError:

date(2026, 2, 30)
ValueError: day is out of range for month

כדי לקבל את התאריך של היום, קוראים ל-date.today(). הפלט שלה משתנה כל יום, ולכן הוא לא מודפס כאן.

קריאת חלקים מהתאריך

print(d.year, d.month, d.day)
print(d.weekday(), d.isoweekday())
2026 10 11
6 7

weekday() סופרת את יום שני כ-0 (ראשון הוא 6), ו-isoweekday() סופרת את יום שני כ-1 (ראשון הוא 7). בוחרים אחת ונשארים איתה.

עיצוב תאריך

strftime בונה טקסט מתוך מחרוזת פורמט. הקודים מתחילים ב-%:

print(d.strftime("%d/%m/%Y"))
print(d.strftime("%A"))
print(d.isoformat())
11/10/2026
Sunday
2026-10-11

%d, %m ו-%Y הם היום, החודש והשנה. %A הוא שם יום בשבוע. הרשימה המלאה של הקודים נמצאת בתיעוד של strftime.

כדי לקרוא תאריך מטקסט, משתמשים ב-fromisoformat. היא מקבלת פורמט ISO:

print(date.fromisoformat("2026-01-01"))
2026-01-01

לפורמטים אחרים, כמו 11/10/2026, משתמשים ב-datetime.strptime.

חישובים עם תאריכים

מוסיפים או מחסרים timedelta, שמייצג משך זמן:

from datetime import timedelta

print(d + timedelta(days=30))
2026-11-10

חיסור של שני תאריכים נותן timedelta:

print(d - date(2026, 1, 1))
print((d - date(2026, 1, 1)).days)
283 days, 0:00:00
283

.days מחזירה את מספר הימים כמספר שלם.

אפשר להשוות תאריכים עם <, > ו-==:

print(d > date(2026, 1, 1))
True

טעויות נפוצות

  • שימוש במחרוזת במקום תאריך. "2026-10-11" > "2026-01-01" משווה טקסט. זה עובד במקרה רק בפורמט ISO. ממירים קודם עם fromisoformat.

מה הלאה

בפוסט הבא: רשימות, שמחזיקות הרבה ערכים במשתנה אחד.