Una dintre cele mai comune categorii de informații cu care te vei ocupa vreodată este cea care se ocupă de diferite aspecte ale timpului. Se pare că acest lucru este mult mai complex decât ați crede la început. În primul rând, cuvântul „timp” poate însemna mai multe lucruri diferite – un punct în timp (12:05 p.m. pe 20 februarie 2021), o oră abstractă de ceas de perete (12:05 p.m.), o durată de timp (1 oră și 15 minute) și, posibil, alte lucruri.
Pe de altă parte, sistemele de ceas și calendar pe care oamenii le-au conceput sunt pur și simplu ciudate. De ce pauza dintre „am” și „pm” are loc între 11 și 12 (11:00, 12:00, 13:00) în loc de între 12 și 1:00 unde ar pune-o orice persoană sănătoasă? De ce unele luni au mai multe zile decât altele? La naiba, ei nici măcar nu urmăresc luna. Și de ce unii ani au mai multe zile decât alții? Și de ce nu începe fiecare lună de la capăt într-o zi de luni? Şi aşa mai departe. Există răspunsuri bune la unele dintre aceste întrebări și răspunsuri proaste la altele, dar toate trebuie să facă față timpului, o durere majoră.
12.1 Pachetul datetime
Python ajută la tratarea acestei probleme prin pachetul datetime. Trebuie să-l importați, desigur, ceea ce fac de obicei prin:
import datetime as dt
Pachetul are aceste aspecte utile:
- Tipul timedelta. Variabilele de acest tip reprezintă durate în timp. Le puteți crea astfel:
one_semester = dt.timedelta(weeks=15) one_year = dt.timedelta(weeks=52) this_class = dt.timedelta(hours=1, minutes=15) finger_snap = dt.timedelta(seconds=.1)
De asemenea, puteți utiliza zile, miliseconds și microseconds. Orice altceva este ambiguu. (Întreabă-te: de ce?)
Nu vă gândiți la variabila timedelta pe care o creați ca fiind intrinsec „în” orice unitate – gândiți-vă la ea ca la o „cantitate de timp”, care ar putea fi apoi exprimată în orice unitate.
Apropo, timedelta poate fi pozitivă sau negativă și le puteți adăuga sau scădea una din alta pentru a obține alte timedelta:
print(one_semester - this_class) print(this_class + finger_snap) print(one_semester - one_year)
▌104 days, 22:45:00 ▌1:15:00.100000 ▌-259 days, 0:00:00
După imprimarea numărului de zile întregi (dacă există), restul rezultatului oferă timpul în ore:minute:secunde:microsecunde. Rețineți că ultima dintre aceste trei rezultate este negativă, deoarece one_semester este evident mai scurt decât one_year.
- Tipul date. Fiecare variabilă de dată reprezintă o dată într-un calendar gregorian idealizat. Le puteți crea prin:
election_day = dt.date(year=2020, month=11, day=3) primary_day = dt.date(year=2020, month=3, day=4) here_we_are = dt.date.today()
Dacă scădeți două date, obțineți un timedelta. Dacă adăugați o date la un timedelta, obțineți o altă date.
print(type(election_day - primary_day)) print(election_day - primary_day) print(type(primary_day + one_semester)) print(primary_day + one_semester)
▌datetime.timedelta ▌244 days, 0:00:00 ▌datetime.date ▌2020-06-17
Rețineți că, dacă timedelta are o precizie mai granulară decât zilele, aceasta se pierde în aceste operațiuni:
if dt.date.today() == dt.date.today() + finger_snap:
print("Va fi încă în aceeași zi cu un pocnit de degete de acum încolo.")
if dt.date.today() == dt.date.today() + this_class:
print("It'll still be the same day one lecture from now.")
if dt.date.today() == dt.date.today() + one_semester:
print("Va fi încă în aceeași zi, un semestru de acum înainte.")
▌Va fi încă în aceeași zi cu un pocnit de degete de acum încolo."). ▌Va fi încă în aceeași zi, un semestru de acum înainte.
De asemenea, puteți compara datele cu operatori de comparare precum < și >=:
if primary_day < election_day:
print("Primarul are loc înainte de alegeri, da!")
else:
print("Wuuuut??")
▌Primarul are loc înainte de alegeri, da!
- Tipul time. Un „timp”, în sine, reprezintă un ceas de perete abstract, independent de orice zi anume. Nu înseamnă „5pm în această după-amiază”, ci mai degrabă „5pm’s in general”.
start_of_class = dt.time(hour=12, minute=35)
Acestea pot fi, de asemenea, comparate în moduri așteptate, dar nu adăugate sau scăzute (ceea ce de fapt nu ar avea sens – de ce?)
- În cele din urmă, avem tipul datetime, care, după cum sugerează și numele, combină caracteristicile atât ale datelor, cât și ale orelor. De fapt, o variabilă datetime reprezintă un punct absolut, specific din istorie. Opțiunile de creare includ:
this_exact_moment = dt.datetime.now()
terrorist_attack = dt.datetime(2001, 9, 11, 10, 33)
print("Right now it's: {}".format(this_exact_moment))
print("A horrible thing occurred at: {}".format(
terrorist_attack))
▌Right now it's: 2021-03-10 09:33:57.015432 ▌A horrible thing occurred at: 2001-09-11 10:33:00
De asemenea, putem folosi metoda .combine() a datetime pentru a pune o dată și o oră împreună într-o dată și oră:
todays_class = dt.datetime.combine(here_we_are,
start_of_class)
print("Today's lecture is at: {}".format(todays_class))
▌Today's lecture is at: 2021-03-03 12:35:00
datetime pot fi scăzute unul din celălalt, iar timedelta pot fi adăugate sau scăzute la/din ele pentru a produce alte datetime. Ele pot fi, de asemenea, comparate. În cele din urmă, metodele .time() și .date()vor produce părțile constitutive ca variabile de oră sau dată, în consecință.
Sursa: Stephen Davies, The Crystal Ball – Instruction Manual, Vol. 2: Introduction to Data Science, v. 1.1. Copyright © 2020 Stephen Davies. Licența CC BY-SA 4.0. Traducere și adaptare: Nicolae Sfetcu. © 2021 MultiMedia Publishing, Introducere în Știința Datelor, Volumul 2
Descoperă mai multe la MultiMedia
Abonează-te ca să primești ultimele articole prin email.



Lasă un răspuns