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)
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
datetime.now() # current date + time
date.today() # current date onlyAritmetică cu timedelta
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.0timedelta acceptă days, seconds, microseconds, milliseconds,
minutes, hours, weeks (NU months sau years, care sunt ambigue).
Formatare: strftime
Transformă datetime → șir conform unui model.
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.
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):
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ă
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`.
Afișează indiciu
baza + timedelta(zile=30), apoi .strftime
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
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).
Afișează indiciu
strptime cu modelul în format italian.
Soluție disponibilă după 3 încercări
Provocare suplimentară
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.
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