Modul mx.DateTime
Modul mx.DateTime
je dostupný jen pro Python verze 2.X, pro trojkovou řadu už/zatím ne.
Moduly pro práci s časem
Modul time
Modul time
je standardní modul, takže je dostupný bez potřeby doinstalace.
Pokud vás zajímá, jak pracovat s modulem time
, využijte
atributů __doc__
a __dict__
.
Atribut __doc__
byl vysvětlen v kapitole
Docstringy a anotace.
Atribut __dict__
se používá ve spojení s moduly a vrací
slovník, který obsahuje všechny funkce z
modulu s jejich krátkým popisem.
>>> x = time.__dict__
>>> x.keys()
['tzset', 'ctime', 'clock', 'altzone', 'struct_time', 'asctime',
'strptime', 'gmtime', '__package__', 'accept2dyear', 'mktime',
'timezone', 'sleep', 'tzname', 'daylight', 'time', '__name__',
'__doc__', 'strftime', 'localtime']
>>> print(time.localtime.__doc__)
localtime([seconds]) -> (tm_year,tm_mon,tm_mday,tm_hour,tm_min,
tm_sec,tm_wday,tm_yday,tm_isdst)
Convert seconds since the Epoch to a time tuple expressing local time.
When 'seconds' is not passed in, convert the current time instead.
>>> time.localtime()
time.struct_time(tm_year=2013, tm_mon=5, tm_mday=19, tm_hour=18,
tm_min=52, tm_sec=40, tm_wday=6, tm_yday=139, tm_isdst=1)
>>> print(time.localtime().tm_year)
2013
>>> time.strftime('%d.%m.%Y')
'19.05.2013'
Zkuste si print(time.__doc__)
, vypíšou se vám další
funkce z modulu time
.
Za zmínku stojí třeba funkce time.sleep(sec)
,
která pozastaví provádění programu na sec sekund, kde
sec může být desetinné číslo.
Modul datetime
Modul datetime
je také standardní modul Pythonu.
Modul calendar
Modul calendar
je také standardní modul Pythonu.
Modul mx.DateTime
Modul mx.DateTime není standardní modul Pythonu.
Pokud jej nemáte nainstalovaný, budete jej muset doinstalovat (dobrá rada nad zlato :-).
V debianu najdete balíček python-egenix-mxdatetime
(plus dokumentaci v python-egenix-mxdatetime-doc
). Ale třeba v
SuSE Linuxu je to python-egenix-mx-base
. Bohužel, oboje pouze pro verzi Pythonu 2.7.
Modul mx.DateTime byl novým a nadějným modulem v dobách Pythonu 2.1, kdy jsem psal poprvé tento manuál. Měl lepší a logičtější sadu objektů, než standardní moduly Pythonu pro práci s časem. To, že ještě dnes je dostupný v distribucích pouze pro verzi 2.7 je důvodem k zamyšlení, zda tento modul v nově pasném kódu ještě používat.
Srovnejte použití modulu mx.DateTime s modulem time:
>>> time.localtime()
(2002, 9, 16, 15, 43, 16, 0, 259, 1)
>>> mx.DateTime.localtime()
<DateTime object for '2002-09-16 15:43:30.52' at 8127ec0>
>>> print mx.DateTime.localtime()
2002-09-16 15:43:34.53
Modul mx.DateTime
používá pro čas objekt DateTime object
.
Ten je argumentem nebo návratovou hodnotou mnoha funkcí z tohoto modulu.
Jak je to s časem
Nejdříve bych měl vysvětlit, jak to s časem vlastně je. Čas je na různých místech světa různý. Lidé i počítače, kteří spolu komunikují po celém světě, se musí domluvit na tom, kolik je. Čas, který ukazují vaše hodinky je s největší pravděpodobností lokální čas, který platí jen pro jednu časovou zónu.
Aby se lidé (a počítače) mohly domluvit na čase po celém světě, byl zaveden Universal Coordinated Time (UTC), který je v jeden okamžik na celém světě stejný. Dříve byl označovaný jako GMT (GMT je tedy to samé jako UTC). Váš počítač by měl mít nastaven čas UTC, měl by vědět, v jaké je časové zóně a z toho spočítat lokální čas. Ne vždy tomu tak je, proto se může stát, že Váš lokální čas i UTC bude jedno a to samé.
Funkce z modulu mx.DateTime
now()
- vrací aktuální lokální čas jako DateTime objekt.utc()
- vrací Universal Coordiante Time (UTC) jako DateTime objektgmt()
- to samé, jakoutc()
-
DateTime(year, month, day, hour, minute ,second)
- vrací objekt DateTime s časem ze zadaných hodnot. -
Date(year, month, day)
- skrácenější verzeDateTime()
. -
localtime(arg)
- pokud nezadáte žádný argument, vrací to samé jakonow()
. Argumentem může být číslo, které určuje čas objektu DateTime v sekundách po čase1970-01-01 01:00:00.00
. -
ctime(arg)
- vrátí řetězec v tomto tvaru: 'Wed Sep 18 11:56:26 2002', arg je DateTime ojekt
>>> DateTime(1999,1,2,5,0,20.0)
<DateTime object for '1999-01-02 05:00:20.00' at 812c800>
>>> Date(1999,1,2)
<DateTime object for '1999-01-02 00:00:00.00' at 8127eb0>
>>> localtime(1020000000.5)
<DateTime object for '2002-04-28 15:20:00.50' at 8127eb0>
>>> ctime(localtime())
'Wed Sep 18 11:56:26 2002'
Objekt DateTime
Atributy
Co je to objekt bylo vysvětleno v kapitole Třídy a objekty. Objekty mají metody a atributy. Objekt DateTime není výjimkou. Některé atributy a metody zde vypíšu a myslím, že k nim není třeba komentáře. Jenom si všimněte, že některé atributy jsou řetězce a některé čísla. Co se k čemu dá využít už zůstává jen na vaší fantazii.
year
date
day
time
hour
minute
second
….
Příklad užití:
>>> cas = mx.DateTime.now()
>>> type(cas)
<type 'mx.DateTime.DateTime'>
>>> cas.date
'2002-09-18'
>>> cas.time
'12:11:40.59'
>>> cas.minute
11
>>> type(cas.time)
<type 'string'>
>>> type(cas.minute)
<type 'int'>
Metoda strftime()
Metoda strftime(formatovaci_retezec)
vrací
řetězec obsahující datum sformátovaný dle argumentu
formatovaci_retezec. Tento argument je nepovinný, pokud jej
nepoužijete, vrátí se vám to samé, jako byste použili formátovací
znak "%c". Výstup je pak stejný jako u funkce
mx.DateTime.ctime()
. Návratovou hodnotou je vždy
řetězec.
'Wed Sep 18 12:11:40 2002'
Speciální formátovací znaky jsou:
znak | význam |
---|---|
'%c' | Celý datum |
'%y' | Rok - posledni dvojčíslí |
'%Y' | Rok - celé číslo |
'%m' | Měsíc - jako číslo |
'%h' | Měsíc - anglická zkratka |
'%d' | Den |
'%a' | Den v týdnu - anglická zkratka |
'%A' | Anglický název dne v týdnu |
'%H' | Hodiny |
'%M' | Minuty |
'%S' | Sekundy |
'%s | Počet sekund od času 1970-01-01 01:00:00.00 |
formatovaci_retezec může obsahovat jakékoliv znaky, nejenom tyto speciální.
'Prave je 12.11.40'
>>> cas
<DateTime object for '2002-09-18 12:11:40.59' at 8127ee0>
>>> cas.strftime('%s')
'1032343900'
>>> mx.DateTime.localtime(1032343900)
<mx.DateTime.DateTime object for '2002-09-18 12:11:40.00' at b74fa1e0>