Modul datetime v Pythonu
V Pythonu nejsou datum a čas vlastní datové typy, ale modul s názvem Čas schůzky v Pythonu lze importovat pro práci s datem i časem. Modul Datetime v Pythonu je integrován v Pythonu, takže jej není třeba instalovat externě.
V tomto článku prozkoumáme Jak DateTime v Pythonu funguje a jaké jsou hlavní třídy modulu DateTime v Pythonu.
Obsah
- Modul DateTime v Pythonu
- Python Date Class
- Třída Python Time
- Třída Datetime v Pythonu
- Třída Python Timedelta
- Python DateTime.tzinfo()
- Časové pásmo Python DateTime
Modul DateTime v Pythonu
Datum a čas v Pythonu modul poskytuje třídám práci s datem a časem. Tyto třídy poskytují několik funkcí pro práci s daty, časy a časovými intervaly. Date a DateTime jsou objekty v Pythonu, takže když s nimi manipulujete, manipulujete s objekty a ne s řetězci nebo časovými razítky.
Modul DateTime je rozdělen do 6 hlavních tříd –
- datum – Idealizované naivní datum, za předpokladu, že aktuální gregoriánský kalendář vždy byl a vždy bude platný. Jeho atributy jsou rok, měsíc a den. můžete odkazovat - Python DateTime – třída data
- čas – Idealizovaný čas, nezávislý na jakémkoli konkrétním dni, za předpokladu, že každý den má přesně 24*60*60 sekund. Jeho atributy jsou hodina, minuta, sekunda, mikrosekunda a tzinfo. Můžete odkazovat na - Python DateTime – třída času
- čas schůzky – Jedná se o kombinaci data a času spolu s atributy rok, měsíc, den, hodina, minuta, sekunda, mikrosekunda a tzinfo. Můžete odkazovat na - Python DateTime – třída DateTime
- časová delta – Trvání vyjadřující rozdíl mezi dvěma instancemi data, času nebo data a času na mikrosekundové rozlišení. Můžete odkazovat na - Python DateTime – třída Timedelta
- tzinfo – Poskytuje informační objekty časové zóny. Můžete odkazovat na - Python – datetime.tzinfo()
- časové pásmo – Třída, která implementuje abstraktní základní třídu tzinfo jako pevný posun od UTC (novinka ve verzi 3.2). Můžete odkazovat na - Zpracování časového pásma v Pythonu
Python Date Class
Třída date se používá k vytvoření instance datových objektů v Pythonu. Když je objekt této třídy konkretizován, představuje datum ve formátu YYYY-MM-DD . Konstruktor této třídy potřebuje tři povinné argumenty rok, měsíc a datum.
Syntaxe třídy Datum v Pythonu
class datetime.date(year, month, day)
Argumenty musí být v následujícím rozsahu –
- MINYEAR <= rok <= MAXYEAR
- 1 <= měsíc <= 12
- 1 <= den <= počet dní v daném měsíci a roce
Poznámka – Pokud argument není celé číslo, vyvolá TypeError a pokud je mimo rozsah, bude vyvolána ValueError.
Objekt Date představující data v Pythonu
Inicializace konstruktoru a předání argumentů ve formátu rok, měsíc a datum.
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> |
Výstup:
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) Získejte aktuální datum
Pro vrácení aktuálního místního data se používá funkce today() třídy date. Funkce today() přichází s několika atributy (rok, měsíc a den). Tyto lze vytisknout jednotlivě.
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)> |
Výstup
Today's date is 2021-08-19
Získejte dnešní rok, měsíc a datum
Atributy rok, měsíc a datum můžeme získat z objektu date pomocí atributu year, month a date třídy date.
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)> |
Výstup
Current year: 2021 Current month: 8 Current day: 19
Získejte datum z časového razítka
Objekty data můžeme vytvořit z časových razítek y=pomocí metody fromtimestamp(). Časové razítko je počet sekund od 1. ledna 1970 v UTC do určitého data.
Python3
from> datetime> import> datetime> # Getting Datetime from timestamp> date_time> => datetime.fromtimestamp(> 1887639468> )> print> (> 'Datetime from timestamp:'> , date_time)> |
Výstup
Datetime from timestamp: 2029-10-25 16:17:48
Převést datum na řetězec
Objekt data můžeme převést na reprezentaci řetězce pomocí dvou funkcí isoformat() a 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> ))> |
Výstup
String Representation 2021-08-19
Seznam metod datové třídy
| Název funkce | Popis |
|---|---|
| ctime() | Vrátí řetězec představující datum |
| z isocalendar() | Vrátí datum odpovídající kalendáři ISO |
| fromisoformat() | Vrátí objekt data z řetězcové reprezentace data |
| odordinální() | Vrátí objekt data z proleptického gregoriánského ordinálu, kde 1. leden roku 1 má ordinální 1 |
| fromtimestamp() | Vrátí objekt data z časového razítka POSIX |
| isocalendar() | Vrátí n-tici rok, týden a den v týdnu |
| isoformat() | Vrátí řetězcovou reprezentaci data |
| isoweekday() | Vrátí den v týdnu jako celé číslo, kde pondělí je 1 a neděle je 7 |
| nahradit() | Změní hodnotu objektu data s daným parametrem |
| strftime() | Vrátí řetězcovou reprezentaci data v daném formátu |
| timetuple() | Vrátí objekt typu time.struct_time |
| dnes() | Vrátí aktuální místní datum |
| toordinální() | Vraťte proleptický gregoriánský ordinál data, kde 1. leden roku 1 má řadové číslo 1 |
| všední den() | Vrátí den v týdnu jako celé číslo, kde pondělí je 0 a neděle je 6 |
Třída Python Time
Časová třída vytváří časový objekt, který představuje místní čas nezávisle na jakémkoli dni.
Syntaxe konstruktoru:
class datetime.time(hodina=0, minuta=0, sekunda=0, mikrosekunda=0, tzinfo=Žádné, *, fold=0)
Všechny argumenty jsou volitelné. tzinfo může být Žádný, jinak musí být všechny atributy celočíselné v následujícím rozsahu –
- 0 <= hodina < 24
- 0 <= minuta < 60
- 0 <= sekunda < 60
- 0 <= mikrosekunda < 1000000
- vložit [0, 1]
Příklad 1: Objekt Time představující čas v Pythonu
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> |
Výstup:
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)
Příklad 2: Získejte hodiny, minuty, sekundy a mikrosekundy
Po vytvoření časového objektu lze také samostatně vytisknout jeho atributy.
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)> |
Výstup:
hour = 11 minute = 34 second = 56 microsecond = 0
Příklad 3: Převeďte objekt Time na String
Pomocí metody isoformat() můžeme převést objekt času na řetězec.
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> ))> |
Výstup
String Representation: 12:24:36.001212
Seznam metod časové třídy
| Název funkce | Popis |
|---|---|
| dst() | Vrací tzinfo.dst() je tzinfo není Žádné |
| fromisoformat() | Vrátí objekt time z řetězcové reprezentace času |
| isoformat() | Vrátí řetězcovou reprezentaci času z objektu time |
| nahradit() | Změní hodnotu objektu time s daným parametrem |
| strftime() | Vrátí řetězcovou reprezentaci času v daném formátu |
| tzname() | Vrací tzinfo.tzname() is tzinfo není Žádné |
| utcoffset() | Vrací tzinfo.utcffsets() je tzinfo není Žádné |
Třída Datetime v Pythonu
The třída DateTime obsahuje informace o datu a čase. Stejně jako objekt data, datum a čas předpokládá aktuální gregoriánský kalendář rozšířený v obou směrech; jako objekt času, datum a čas předpokládá, že každý den má přesně 3600*24 sekund.
Syntaxe konstruktoru:
class datetime.datetime(rok, měsíc, den, hodina=0, minuta=0, sekunda=0, mikrosekunda=0, tzinfo=Žádné, *, fold=0)
Argumenty roku, měsíce a dne jsou povinné. tzinfo může být Žádné, všechny atributy musí být celé číslo v následujícím rozsahu –
- MINYEAR <= rok <= MAXYEAR
- 1 <= měsíc <= 12
- 1 <= den <= počet dní v daném měsíci a roce
- 0 <= hodina < 24
- 0 <= minuta < 60
- 0 <= sekunda < 60
- 0 <= mikrosekunda < 1000000
- vložit [0, 1]
Poznámka – Předání argumentu jiného než celé číslo vyvolá TypeError a předání argumentů mimo rozsah vyvolá hodnotu ValueError.
Objekt DateTime představující DateTime v Pythonu
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)> |
Výstup:
1999-12-12 00:00:00 1999-12-12 12:12:12.342380
Získejte rok, měsíc, hodinu, minutu a časové razítko
Po vytvoření objektu DateTime lze také samostatně vytisknout jeho atributy.
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())> |
Výstup:
year = 1999 month = 12 hour = 12 minute = 12 timestamp = 945000732.0
Aktuální datum a čas
Aktuální datum a čas můžete vytisknout pomocí funkce Datetime.now(). Funkce now() vrací aktuální místní datum a čas.
Python3
from> datetime> import> datetime> # Calling now() function> today> => datetime.now()> print> (> 'Current date and time is'> , today)> |
Výstup:
Current date and time is 2019-10-25 11:12:11.289834
Převeďte datum a čas Pythonu na řetězec
Datetime můžeme převést na řetězec v Pythonu pomocí datetime.strftime a metody datetime.isoformat.
Python3
from> datetime> import> datetime as dt> # Getting current date and time> now> => dt.now()> string> => dt.isoformat(now)> print> (string)> print> (> type> (string))> |
Výstup
2021-08-19T18:13:25.346259
Seznam metod třídy Datetime
| Název funkce | Popis |
|---|---|
| astimezone() | Vrátí objekt DateTime obsahující informace o časovém pásmu. |
| kombajn() | Zkombinuje objekty data a času a vrátí objekt DateTime |
| ctime() | Vrátí řetězcovou reprezentaci data a času |
| datum() | Vraťte objekt třídy Date |
| fromisoformat() | Vrátí objekt datetime z řetězcové reprezentace data a času |
| odordinální() | Vrátí objekt data z proleptické gregoriánské ordinály, kde 1. leden roku 1 má ordinální 1. Hodina, minuta, sekunda a mikrosekunda jsou 0 |
| fromtimestamp() | Datum a čas návratu z časového razítka POSIX |
| isocalendar() | Vrátí n-tici rok, týden a den v týdnu |
| isoformat() | Vrátí řetězcovou reprezentaci data a času |
| isoweekday() | Vrátí den v týdnu jako celé číslo, kde pondělí je 1 a neděle je 7 |
| Nyní() | Vrátí aktuální místní datum a čas s parametrem tz |
| nahradit() | Změní specifické atributy objektu DateTime |
| strftime() | Vrátí řetězcovou reprezentaci objektu DateTime v daném formátu |
| strptime() | Vrátí objekt DateTime odpovídající řetězci data |
| čas() | Vraťte objekt třídy Time |
| timetuple() | Vrátí objekt typu time.struct_time |
| timetz() | Vraťte objekt třídy Time |
| dnes() | Vraťte místní datum a čas s tzinfo jako Žádné |
| toordinální() | Vraťte proleptický gregoriánský ordinál data, kde 1. leden roku 1 má řadové číslo 1 |
| tzname() | Vrátí název časového pásma |
| utcfromtimestamp() | Vraťte UTC z časového razítka POSIX |
| utcoffset() | Vrátí offset UTC |
| utcnow() | Vrátit aktuální datum a čas UTC |
| všední den() | Vrátí den v týdnu jako celé číslo, kde pondělí je 0 a neděle je 6 |
Třída Python Timedelta
Třída timedelta v Pythonu se používá pro výpočet rozdílů v datech a lze ji také použít pro manipulaci s datem v Pythonu. Je to jeden z nejjednodušších způsobů, jak provádět manipulace s datem.
Syntaxe konstruktoru:
class datetime.timedelta(dny=0, sekundy=0, mikrosekundy=0, milisekundy=0, minuty=0, hodiny=0, týdny=0)
Vrácení: Datum
Přidejte dny do objektu DateTime
Ukázka funkce timedelta
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))> |
Výstup:
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
Rozdíl mezi dvěma daty a časy
Pomocí této třídy lze také najít rozdíly data a času.
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))> |
Výstup:
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
Operace podporované třídou Timedelta
| Operátor | Popis |
|---|---|
| Sčítání (+) | Přidá a vrátí dva objekty timedelta |
| Odečítání (-) | Odečte a vrátí dva objekty timedelta |
| Násobení (*) | Vynásobí objekt timedelta s float nebo int |
| Divize (/) | Rozdělí objekt timedelta pomocí float nebo int |
| Rozdělení podlahy (//) | Rozdělí objekt timedelta pomocí float nebo int a vrátí hodnotu int spodní hranice výstupu |
| Modul (%) | Rozdělí dva objekty timedelta a vrátí zbytek |
| + (časová delta) | Vrátí stejný objekt timedelta |
| -(časová delta) | Vrátí výslednici -1*timedelta |
| abs (časová delta) | Vrátí +(timedelta), pokud timedelta.days> 1=0, jinak vrátí -(timedelta) |
| str (časová delta) | Vrátí řetězec ve tvaru (+/-) den[s], HH:MM:SS.UUUUUU |
| repr(časová delta) | Vrátí reprezentaci řetězce ve formě volání konstruktoru |
Formát DateTime v Pythonu
Formátování DateTime může být velmi potřebné, protože reprezentace data se může místo od místa lišit. V některých zemích to může být yyyy-mm-dd a v jiných zemích to může být dd-mm-yyyy. K formátování Pythonu Datetime lze použít funkce strptime a strftime.
Python Datetime strftime
Metoda strftime() převede daný objekt data, času nebo DateTime na řetězcovou reprezentaci daného formátu.
Formát data a času v Pythonu
Pythonský program pro demonstraci funkce strftime().
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)> |
Výstup
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
Poznámka: Další informace viz metoda strftime(). .
Python DateTime strptime
Strptime() vytvoří z daného řetězce objekt DateTime.
Příklad: DateTime 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))> |
Výstup
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 datetime.now() funkce neobsahuje žádné informace o časových pásmech. Využívá pouze aktuální systémový čas. Tzinfo je abstraktní základní třída v Pythonu. Nelze jej přímo vytvořit. Konkrétní podtřída se musí odvozovat od této abstraktní třídy a implementovat metody, které nabízí.
Seznam objektů DateTime.tzinfo() Pythonu
| Název funkce | Popis |
|---|---|
| dst() | Vrací tzinfo.dst() je tzinfo není Žádné |
| fromutc() | Účelem této funkce je upravit datum a čas, vrácení ekvivalentního DateTime ve vlastním místním čase. |
| tzname() | Vrací tzinfo.tzname() is tzinfo není Žádné |
| utcoffset() | Vrací tzinfo.utcffsets() je tzinfo není Žádné |
Příklad
Instance třídy tzinfo může být poskytnuta konstruktorům objektu DateTime a time. Používá se ve scénářích, jako je převod místního času na UTC nebo účtování letního času.
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())> |
Výstup:
datetime.now() : IST Naive Object : None Aware Object : None
Časové pásmo Python DateTime
Časová pásma v DateTime lze použít v případě, kdy chcete zobrazit čas podle časového pásma konkrétní oblasti. To lze provést pomocí pytz modul z Pythonu. Tento modul slouží funkcím převodu data a času a pomáhá uživatelům obsluhující mezinárodní klientské základny.
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> ))> |
Výstup
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