Salt la conținutul principal
Modulul 8 · Lecția 2 din 430/36 în curs~12 min
Lecții din modul (2/4)

datetime: date și ore

Modulul datetime oferă clasele pentru a reprezenta datele și orele.

Cele trei clase principale

  • date — numai data (an, lună, zi)
  • time — numai timp (oră, minut, secundă, microsecundă)
  • datetime — data + ora împreună
  • timedelta — o durată (diferența dintre două instante)
Python
from datetime import date, time, datetime, timedelta

date(2025, 1, 1)                  # datetime.date(2025, 1, 1)
time(14, 30, 0)                   # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0)   # datetime.datetime(2025, 1, 1, 14, 30)

„Acum”: now și today

Python
datetime.now()        # current date + time
date.today()          # current date only

Aritmetică cu timedelta

Python
from datetime import datetime, timedelta

ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)

# difference between two datetimes -> timedelta
delta = domani - ora
delta.days        # 1
delta.total_seconds()   # 86400.0

timedelta acceptă days, seconds, microseconds, milliseconds, minutes, hours, weeks (NU months sau years, care sunt ambigue).

Formatare: strftime

Transformă datetime → șir conform unui model.

Python
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d")         # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M")   # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y")      # 'Wednesday 01 January 2025' (locale-dependent)

Cele mai utilizate directive: %Y an din 4 cifre, %m luna din 2 cifre, %d zi din 2 cifre, %H 24 ore, %M minute, %S secunde.

Analizare: strptime

Opusul: șir → datetime, având în vedere modelul așteptat.

Python
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)

ISO 8601

Pentru schimbul de date preferați întotdeauna formatul ISO 8601 (YYYY-MM-DDTHH:MM:SS):

Python
ora.isoformat()                 # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")

Fusuri orare și date conștiente

În mod implicit, obiectele datetime din Python sunt naive (adică nu conțin informații despre fusul orar). Pentru aplicațiile din lumea reală, este cea mai bună practică să le faceți conștienți setând informații despre fusul orar prin datetime.timezone.utc sau utilizând modulul zoneinfo.

Încearcă

Exercițiu#python.m8.l2.e1
Încercări: 0Se încarcă…

Calculați data la 30 de zile după 1 ianuarie 2025 și formatați-o ca „AAAA-LL-ZZ” în variabila „date_str”. Evaluați `date_str`.

Se încarcă editorul...
Afișează indiciu

baza + timedelta(zile=30), apoi .strftime

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#python.m8.l2.e2
Încercări: 0Se încarcă…

Având în vedere șirul `s = '15/03/2025'`, analizați-l cu strptime în variabila `d` (obiect datetime). Evaluați ziua întreagă a săptămânii `d.weekday()` (0=lun, 6=sun).

Se încarcă editorul...
Afișează indiciu

strptime cu modelul în format italian.

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#python.m8.l2.e3
Încercări: 0Se încarcă…

Import `date` from the `datetime` module. Calculate the difference in days between December 25, 2026 (`date(2026, 12, 25)`) and December 20, 2026 (`date(2026, 12, 20)`). Store the integer number of days (using the `.days` attribute of the delta) in `days_diff`. Finally, evaluate the variable.

Se încarcă editorul...
Afișează indiciu

The difference between two dates returns a timedelta. Access the integer days with delta.days.

Soluție disponibilă după 3 încercări