Python datos ir laiko modulis

Python programoje data ir laikas nėra atskiri duomenų tipai, o modulis, pavadintas DataLaikas Python galima importuoti dirbti su data ir laiku. Python Datetime modulis yra integruotas į Python, todėl nereikia jo diegti išoriškai.

Šiame straipsnyje mes išsiaiškinsime, kaip DateTime Python veikia ir kokios yra pagrindinės DateTime modulio klasės Python.

Turinys

Python DateTime modulis

Python Datetime modulis aprūpina klases dirbti su data ir laiku. Šiose klasėse yra keletas funkcijų, susijusių su datomis, laiku ir laiko intervalais. Data ir DateTime yra Python objektai, todėl manipuliuodami jais manipuliuojate objektais, o ne eilutėmis ar laiko žymomis.

DateTime modulis yra suskirstytas į 6 pagrindines klases –

  • data – Idealizuota naivi data, darant prielaidą, kad dabartinis Grigaliaus kalendorius visada galiojo ir bus. Jo atributai yra metai, mėnuo ir diena. galite remtis - Python DateTime – datos klasė
  • laikas – Idealizuotas laikas, nepriklausomas nuo konkrečios dienos, darant prielaidą, kad kiekviena diena turi lygiai 24*60*60 sekundžių. Jo atributai yra valanda, minutė, sekundė, mikrosekundė ir tzinfo. Galite kreiptis į - Python DateTime – laiko klasė
  • data-time – Tai datos ir laiko derinys kartu su atributais metai, mėnuo, diena, valanda, minutė, sekundė, mikrosekundė ir tzinfo. Galite kreiptis į - Python DateTime – DateTime klasė
  • laiko delta – Trukmė, išreiškianti skirtumą tarp dviejų datos, laiko arba datos laiko atvejų iki mikrosekundės skyros. Galite kreiptis į - Python DateTime – Timedelta klasė
  • tzinfo – Jame pateikiami laiko juostos informacijos objektai. Galite kreiptis į - Python – datetime.tzinfo()
  • laiko zona – Klasė, kuri įgyvendina tzinfo abstrakčią bazinę klasę kaip fiksuotą poslinkį nuo UTC (nauja 3.2 versijoje). Galite kreiptis į - Laiko juostos tvarkymas Python

Python datų klasė

Datos klasė naudojama datos objektams sukurti Python. Kai šios klasės objektas yra egzempliorius, jis reiškia datą formatu MMMM-MM-DD . Šios klasės konstruktoriui reikalingi trys privalomi argumentai metai, mėnuo ir data.

Python datos klasės sintaksė

class datetime.date(year, month, day) 

Argumentai turi būti tokiame diapazone –

  • MINYEAR <= metai <= MAXYEAR
  • 1 <= mėnuo <= 12
  • 1 <= diena <= dienų skaičius per nurodytą mėnesį ir metus

Pastaba – Jei argumentas nėra sveikasis skaičius, jis iškels TypeError, o jei jis yra už diapazono ribų, bus padidintas ValueError.

Datos objektas, vaizduojantis duomenis Python

Konstruktoriaus inicijavimas ir argumentų perdavimas metų, mėnesio ir datos formatu.

Python3




# Python program to> # demonstrate date class> # import the date class> from> datetime> import> date> my_date> => date(> 1996> ,> 12> ,> 11> )> print> (> 'Date passed as argument is'> , my_date)> # Uncommenting my_date = date(1996, 12, 39)> # will raise an ValueError as it is> # outside range> # uncommenting my_date = date('1996', 12, 11)> # will raise a TypeError as a string is> # passed instead of integer>

Išvestis:

Date passed as argument is 1996-12-11 
Traceback (most recent call last):  File '/home/ccabfb570d9bd1dcd11dc4fe55fd6ba2.py', line 14, in   my_date = date(1996, 12, 39) ValueError: day is out of range for month  Traceback (most recent call last):  File '/home/53b974e10651f1853eee3c004b48c481.py', line 18, in   my_date = date('1996', 12, 11) TypeError: an integer is required (got type str) 

Gaukite dabartinę datą

Norėdami grąžinti dabartinę vietinę datą šiandien(), naudojama datos klasės funkcija. Šiandien() funkcija turi keletą atributų (metai, mėnuo ir diena). Juos galima spausdinti atskirai.

Python3




# Python program to> # print current date> from> datetime> import> date> # calling the today> # function of date class> today> => date.today()> print> (> 'Today's date is'> , today)>

Išvestis

Today's date is 2021-08-19 

Gaukite šiandienos metus, mėnesį ir datą

Metų, mėnesio ir datos atributus galime gauti iš datos objekto naudodami datos klasės metų, mėnesio ir datos atributą.

Python3




from> datetime> import> date> # date object of today's date> today> => date.today()> print> (> 'Current year:'> , today.year)> print> (> 'Current month:'> , today.month)> print> (> 'Current day:'> , today.day)>

Išvestis

Current year: 2021 Current month: 8 Current day: 19 

Gaukite datą iš laiko žymos

Mes galime sukurti datos objektus iš laiko žymų y= naudodami fromtimestamp() metodą. Laiko žyma yra sekundžių skaičius nuo 1970 m. sausio 1 d. UTC iki konkrečios datos.

Python3




from> datetime> import> datetime> # Getting Datetime from timestamp> date_time> => datetime.fromtimestamp(> 1887639468> )> print> (> 'Datetime from timestamp:'> , date_time)>

Išvestis

Datetime from timestamp: 2029-10-25 16:17:48 

Konvertuoti datą į eilutę

Datos objektą galime konvertuoti į eilutės atvaizdavimą naudodami dvi funkcijas isoformat () ir strftime ().

Python3




from> datetime> import> date> > # calling the today> # function of date class> today> => date.today()> > # Converting the date to the string> Str> => date.isoformat(today)> print> (> 'String Representation'> ,> Str> )> print> (> type> (> Str> ))>

Išvestis

String Representation 2021-08-19 

Datos klasės metodų sąrašas

Funkcijos pavadinimas

apibūdinimas

ctime() Grąžinkite eilutę, nurodančią datą
isocalendar() Grąžina datą, atitinkančią ISO kalendorių
iš izoformato () Grąžina datos objektą iš datos eilutės
iš eilės () Grąžina datos objektą iš proleptinio grigališkojo eilės, kur 1 metų sausio 1 d. turi 1 eiliškumą
fromtimestamp () Grąžina datos objektą iš POSIX laiko žymos
izokalendorius () Grąžina kelis metus, savaitę ir savaitės dieną
izoformatas () Grąžina datos eilutės atvaizdavimą
isoweekday () Grąžina savaitės dieną kaip sveikąjį skaičių, kur pirmadienis yra 1, o sekmadienis yra 7
pakeisti () Pakeičia datos objekto reikšmę su nurodytu parametru
strftime() Grąžina datos eilutę nurodytu formatu
laiko grafikas () Pateikia objektą, kurio tipas yra time.struct_time
šiandien () Grąžina dabartinę vietinę datą
eilinis () Grąžinkite proleptinį grigališkąjį datos eilės eiliškumą, kur 1 metų sausio 1 d. yra 1 eilė
savaitės diena () Grąžina savaitės dieną kaip sveikąjį skaičių, kur pirmadienis yra 0, o sekmadienis yra 6

Python Time klasė

Laiko klasė sukuria laiko objektą, vaizduojantį vietos laiką, nepriklausomai nuo jokios dienos.

Konstruktoriaus sintaksė:

klasė datatime.time(valanda = 0, minutė = 0, sekundė = 0, mikrosekundė = 0, tzinfo = nėra, *, fold = 0)

Visi argumentai yra neprivalomi. tzinfo gali būti Nėra, kitaip visi atributai turi būti sveikieji skaičiai šiame diapazone -

  • 0 <= valanda < 24
  • 0 <= minutė < 60
  • 0 <= sekundė < 60
  • 0 <= mikrosekundės < 1000000
  • sulankstyti [0, 1]

1 pavyzdys: laiko objektas, vaizduojantis laiką Python

Python3




# Python program to> # demonstrate time class> from> datetime> import> time> # calling the constructor> my_time> => time(> 13> ,> 24> ,> 56> )> print> (> 'Entered time'> , my_time)> # calling constructor with 1> # argument> my_time> => time(minute> => 12> )> print> (> ' Time with one argument'> , my_time)> # Calling constructor with> # 0 argument> my_time> => time()> print> (> ' Time without argument'> , my_time)> # Uncommenting time(hour = 26)> # will rase an ValueError as> # it is out of range> # uncommenting time(hour ='23')> # will raise TypeError as> # string is passed instead of int>

Išvestis:

Entered time 13:24:56  Time with one argument 00:12:00  Time without argument 00:00:00 
Traceback (most recent call last):  File '/home/95ff83138a1b3e67731e57ec6dddef25.py', line 21, in   print(time(hour=26)) ValueError: hour must be in 0..23  Traceback (most recent call last):  File '/home/fcee9ba5615b0b74fc3ba39ec9a789fd.py', line 21, in   print(time(hour='23')) TypeError: an integer is required (got type str) 

2 pavyzdys: gaukite valandas, minutes, sekundes ir mikrosekundes

Sukūrus laiko objektą, jo atributus galima atspausdinti ir atskirai.

Python3




from> datetime> import> time> Time> => time(> 11> ,> 34> ,> 56> )> print> (> 'hour ='> , Time.hour)> print> (> 'minute ='> , Time.minute)> print> (> 'second ='> , Time.second)> print> (> 'microsecond ='> , Time.microsecond)>

Išvestis:

hour = 11 minute = 34 second = 56 microsecond = 0 

3 pavyzdys: Konvertuokite laiko objektą į eilutę

Mes galime konvertuoti laiko objektą į eilutę naudodami isoformat() metodą.

Python3




from> datetime> import> time> # Creating Time object> Time> => time(> 12> ,> 24> ,> 36> ,> 1212> )> # Converting Time object to string> Str> => Time.isoformat()> print> (> 'String Representation:'> ,> Str> )> print> (> type> (> Str> ))>

Išvestis

String Representation: 12:24:36.001212 

Laiko klasės metodų sąrašas

Funkcijos pavadinimas

apibūdinimas

dst() Grąžina tzinfo.dst() yra tzinfo nėra Nėra
iš izoformato () Grąžina laiko objektą iš laiko eilutės vaizdavimo
izoformatas () Grąžina laiko eilutės atvaizdavimą iš laiko objekto
pakeisti () Pakeičia laiko objekto reikšmę duotu parametru
strftime() Grąžina laiko eilutę nurodytu formatu
tzname() Grąžina tzinfo.tzname() yra tzinfo nėra Nėra
utcoffset() Grąžina tzinfo.utcffsets() yra tzinfo nėra Nėra

Python Datetime klasė

The Datos ir laiko klasė yra informacijos apie datą ir laiką. Kaip ir datos objektas, datos laikas suponuoja dabartinį Grigaliaus kalendorių, išplėstą abiem kryptimis; kaip laiko objektas, datos laikas daro prielaidą, kad kiekvienoje dienoje yra lygiai 3600*24 sekundės.

Konstruktoriaus sintaksė:

klasė datatime.datetime(metai, mėnuo, diena, valanda = 0, minutė = 0, sekundė = 0, mikrosekundė = 0, tzinfo = nėra, *, fold = 0)

Metų, mėnesio ir dienos argumentai yra privalomi. tzinfo gali būti Nėra, likusieji visi atributai turi būti sveikieji skaičiai šiame diapazone -

  • MINYEAR <= metai <= MAXYEAR
  • 1 <= mėnuo <= 12
  • 1 <= diena <= dienų skaičius per nurodytą mėnesį ir metus
  • 0 <= valanda < 24
  • 0 <= minutė < 60
  • 0 <= sekundė < 60
  • 0 <= mikrosekundės < 1000000
  • sulankstyti [0, 1]

Pastaba – Perdavus argumentą, kuris nėra sveikasis skaičius, sukelta TypeError, o perduodant argumentus už diapazono ribų – ValueError.

DateTime objektas, vaizduojantis DateTime Python

Python3




# Python program to> # demonstrate datetime object> from> datetime> import> datetime> # Initializing constructor> a> => datetime(> 1999> ,> 12> ,> 12> )> print> (a)> # Initializing constructor> # with time parameters as well> a> => datetime(> 1999> ,> 12> ,> 12> ,> 12> ,> 12> ,> 12> ,> 342380> )> print> (a)>

Išvestis:

1999-12-12 00:00:00 1999-12-12 12:12:12.342380 

Gaukite metus, mėnesį, valandą, minutę ir laiko žymą

Sukūrus DateTime objektą, jo atributus galima atspausdinti ir atskirai.

Python3




from> datetime> import> datetime> a> => datetime(> 1999> ,> 12> ,> 12> ,> 12> ,> 12> ,> 12> )> print> (> 'year ='> , a.year)> print> (> 'month ='> , a.month)> print> (> 'hour ='> , a.hour)> print> (> 'minute ='> , a.minute)> print> (> 'timestamp ='> , a.timestamp())>

Išvestis:

year = 1999 month = 12 hour = 12 minute = 12 timestamp = 945000732.0 

Dabartinė data ir laikas

Dabartinę datą ir laiką galite spausdinti naudodami funkciją Datetime.now(). Funkcija now() grąžina dabartinę vietinę datą ir laiką.

Python3




from> datetime> import> datetime> # Calling now() function> today> => datetime.now()> print> (> 'Current date and time is'> , today)>

Išvestis:

Current date and time is 2019-10-25 11:12:11.289834 

Konvertuoti Python Datetime į eilutę

Datetime galime konvertuoti į eilutę Python naudodami datetime.strftime ir datetime.isoformat metodai.

Python3




from> datetime> import> datetime as dt> # Getting current date and time> now> => dt.now()> string> => dt.isoformat(now)> print> (string)> print> (> type> (string))>

Išvestis

2021-08-19T18:13:25.346259 

Datos ir laiko klasės metodų sąrašas

Funkcijos pavadinimas

apibūdinimas

astimezona () Grąžina DateTime objektą, kuriame yra laiko juostos informacija.
sujungti () Sujungia datos ir laiko objektus ir grąžina objektą DateTime
ctime() Grąžina datos ir laiko eilutės atvaizdavimą
data() Grąžinkite Datos klasės objektą
iš izoformato () Grąžina datos ir laiko objektą iš datos ir laiko eilutės
iš eilės () Grąžina datos objektą iš proleptinio grigališkojo eilės, kur 1 metų sausio 1 eilės tvarka yra 1. Valanda, minutė, sekundė ir mikrosekundė yra 0
fromtimestamp () Grąžinimo data ir laikas iš POSIX laiko žymos
izokalendorius () Grąžina kelis metus, savaitę ir savaitės dieną
izoformatas () Grąžina datos ir laiko eilutės atvaizdavimą
isoweekday () Grąžina savaitės dieną kaip sveikąjį skaičių, kur pirmadienis yra 1, o sekmadienis yra 7
dabar () Grąžina esamą vietinę datą ir laiką su tz parametru
pakeisti () Pakeičia specifinius DateTime objekto atributus
strftime() Pateikia DateTime objekto eilutę nurodytu formatu
strptime() Grąžina DateTime objektą, atitinkantį datos eilutę
laikas() Grąžinkite laiko klasės objektą
laiko grafikas () Pateikia objektą, kurio tipas yra time.struct_time
timetz () Grąžinkite laiko klasės objektą
šiandien () Grąžinkite vietinį DateTime su tzinfo kaip Nėra
eilinis () Grąžinkite proleptinį grigališkąjį datos eilės eiliškumą, kur 1 metų sausio 1 d. yra 1 eilė
tzname() Grąžina laiko juostos pavadinimą
utcfromtimestamp() Grąžinti UTC iš POSIX laiko žymos
utcoffset() Grąžina UTC poslinkį
utcnow () Grąžinti dabartinę UTC datą ir laiką
savaitės diena () Grąžina savaitės dieną kaip sveikąjį skaičių, kur pirmadienis yra 0, o sekmadienis yra 6

Python Timedelta klasė

Python timedelta klasė naudojama datų skirtumams apskaičiuoti, taip pat gali būti naudojama datos manipuliavimui Python. Tai vienas iš paprasčiausių datos manipuliavimo būdų.

Konstruktoriaus sintaksė:

klasė datatime.timedelta(dienos = 0, sekundės = 0, mikrosekundės = 0, milisekundės = 0, minutės = 0, valandos = 0, savaitės = 0)
Grąžinimas: data

Pridėkite dienų prie DateTime objekto

Timedelta funkcijos demonstravimas

Python3




from> datetime> import> datetime, timedelta> # Using current time> ini_time_for_now> => datetime.now()> # printing initial_date> print> (> 'initial_date'> ,> str> (ini_time_for_now))> # Calculating future dates> # for two years> future_date_after_2yrs> => ini_time_for_now> +> timedelta(days> => 730> )> future_date_after_2days> => ini_time_for_now> +> timedelta(days> => 2> )> # printing calculated future_dates> print> (> 'future_date_after_2yrs:'> ,> str> (future_date_after_2yrs))> print> (> 'future_date_after_2days:'> ,> str> (future_date_after_2days))>

Išvestis:

initial_date 2019-10-25 12:01:01.227848 future_date_after_2yrs: 2021-10-24 12:01:01.227848 future_date_after_2days: 2019-10-27 12:01:01.227848 

Skirtumas tarp dviejų datos ir laiko

Datos ir laiko skirtumus taip pat galima rasti naudojant šią klasę.

Python3




# Timedelta function demonstration> from> datetime> import> datetime, timedelta> # Using current time> ini_time_for_now> => datetime.now()> # printing initial_date> print> (> 'initial_date'> ,> str> (ini_time_for_now))> # Some another datetime> new_final_time> => ini_time_for_now> +> > > timedelta(days> => 2> )> # printing new final_date> print> (> 'new_final_time'> ,> str> (new_final_time))> # printing calculated past_dates> print> (> 'Time difference:'> ,> str> (new_final_time> -> > ini_time_for_now))>

Išvestis:

initial_date 2019-10-25 12:02:32.799814 new_final_time 2019-10-27 12:02:32.799814 Time difference: 2 days, 0:00:00 

„Timedelta Class“ palaikomos operacijos

operatorius

apibūdinimas

Papildymas (+) Prideda ir grąžina du laiko deltos objektus
Atimtis (-) Atima ir grąžina du laiko deltos objektus
Daugyba (*) Padaugina timedelta objektą su float arba int
skyrius (/) Padalija timedelta objektą su float arba int
Grindų padalijimas (//) Padalija timedelta objektą su float arba int ir grąžina išvesties int of floor reikšmę
modulis (%) Padalija du timedelta objektą ir grąžina likutį
+ (laiko delta) Grąžina tą patį timedelta objektą
-(laiko delta) Grąžina -1*timedelta rezultatą
abs (laiko delta) Grąžina +(timedelta), jei timedelta.days> 1=0, kitaip grąžina -(timedelta)
str(timedelta) Grąžina eilutę forma (+/-) day[s], HH:MM:SS.UUUUUU
repr (timedelta) Grąžina eilutės atvaizdavimą konstruktoriaus iškvietimo forma

Formatuokite datą ir laiką Python

Datos ir laiko formatavimas gali būti labai reikalingas, nes datos pateikimas įvairiose vietose gali skirtis. Kai kuriose šalyse jis gali būti yyyy-mm-dd, o kitose - dd-mm-yyyy. Python Datetime formatavimui galima naudoti strptime ir strftime funkcijas.

Python Datetime strftime

Strftime() metodas konvertuoja nurodytą datą, laiką arba DateTime objektą į nurodyto formato eilutės atvaizdavimą.

Python datos ir laiko formatas

Python programa, skirta funkcijai strftime () parodyti

Python3




from> datetime> import> datetime as dt> # Getting current date and time> now> => dt.now()> print> (> 'Without formatting'> , now)> # Example 1> s> => now.strftime(> '%A %m %-Y'> )> print> (> ' Example 1:'> , s)> # Example 2> s> => now.strftime(> '%a %-m %y'> )> print> (> ' Example 2:'> , s)> # Example 3> s> => now.strftime(> '%-I %p %S'> )> print> (> ' Example 3:'> , s)> # Example 4> s> => now.strftime(> '%H:%M:%S'> )> print> (> ' Example 4:'> , s)>

Išvestis

Without formatting 2021-08-19 18:16:25.881661 Example 1: Thursday 08 2021 Example 2: Thu 8 21 Example 3: 6 PM 25 Example 4: 18:16:25 

Pastaba: Norėdami gauti daugiau informacijos, žr strftime() metodas .

Python DateTime strptime

Strptime() sukuria DateTime objektą iš nurodytos eilutės.

Pavyzdys: DataLaikas strptime

Python3




# import datetime module from datetime> from> datetime> import> datetime> > # consider the time stamps from a list in string> # format DD/MM/YY H:M:S.micros> time_data> => [> '25/05/99 02:35:8.023'> ,> '26/05/99 12:45:0.003'> ,> > '27/05/99 07:35:5.523'> ,> '28/05/99 05:15:55.523'> ]> > # format the string in the given format : day/month/year> # hours/minutes/seconds-micro seconds> format_data> => '%d/%m/%y %H:%M:%S.%f'> > # Using strptime with datetime we will format string> # into datetime> for> i> in> time_data:> > print> (datetime.strptime(i, format_data))>

Išvestis

1999-05-25 02:35:08.023000 1999-05-26 12:45:00.003000 1999-05-27 07:35:05.523000 1999-05-28 05:15:55.523000 

Python DateTime.tzinfo()

The datatime.now() funkcija nėra informacijos apie laiko juostas. Jis naudoja tik esamą sistemos laiką. „Tzinfo“ yra abstrakti pagrindinė „Python“ klasė. Jis negali būti tiesiogiai pavaizduotas. Konkretus poklasis turi kilti iš šios abstrakčios klasės ir įgyvendinti jos siūlomus metodus.

Python DateTime.tzinfo() objektų sąrašas

Funkcijos pavadinimas

apibūdinimas

dst() Grąžina tzinfo.dst() yra tzinfo nėra Nėra
fromutc() Šios funkcijos tikslas – koreguoti datos ir laiko duomenis,
grąžinant lygiavertį DateTime savo vietos laiku.
tzname() Grąžina tzinfo.tzname() yra tzinfo nėra Nėra
utcoffset() Grąžina tzinfo.utcffsets() yra tzinfo nėra Nėra

Pavyzdys

tzinfo klasės egzempliorius gali būti pateiktas DateTime ir laiko objektų konstruktoriams. Jis naudojamas scenarijuose, pvz., konvertuojant vietinį laiką į UTC arba apskaičiuojant vasaros laiką.

Python3




import> datetime as dt> from> dateutil> import> tz> tz_string> => dt.datetime.now(dt.timezone.utc).astimezone().tzname()> print> (> 'datetime.now() :'> , tz_string)> NYC> => tz.gettz(> 'Europe / Berlin'> )> dt1> => dt.datetime(> 2022> ,> 5> ,> 21> ,> 12> ,> 0> )> dt2> => dt.datetime(> 2022> ,> 12> ,> 21> ,> 12> ,> 0> , tzinfo> => NYC)> print> (> 'Naive Object :'> , dt1.tzname())> print> (> 'Aware Object :'> , dt2.tzname())>

Išvestis:

datetime.now() : IST Naive Object : None Aware Object : None 

Python DateTime laiko juosta

Laiko juostos DateTime gali būti naudojamos tuo atveju, kai norima rodyti laiką pagal konkretaus regiono laiko juostą. Tai galima padaryti naudojant pytz modulis Python. Šis modulis aptarnauja datos ir laiko konvertavimo funkcijas ir padeda vartotojams, aptarnaujantiems tarptautines klientų bazes.

Python3




from> datetime> import> datetime> from> pytz> import> timezone> format> => '%Y-%m-%d %H:%M:%S %Z%z'> # Current time in UTC> now_utc> => datetime.now(timezone(> 'UTC'> ))> print> (now_utc.strftime(> format> ))> timezones> => [> 'Asia/Kolkata'> ,> 'Europe/Kiev'> ,> 'America/New_York'> ]> for> tzone> in> timezones:> > # Convert to Asia/Kolkata time zone> > now_asia> => now_utc.astimezone(timezone(tzone))> > print> (now_asia.strftime(> format> ))>

Išvestis

2021-08-19 18:27:28 UTC+0000 2021-08-19 23:57:28 IST+0530 2021-08-19 21:27:28 EEST+0300 2021-08-19 14:27:28 EDT-0400