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.

>>> import time
>>> 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:

>>> import time,mx.DateTime
>>> 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 objekt
  • gmt() - to samé, jako utc()
  • DateTime(year, month, day, hour, minute ,second) - vrací objekt DateTime s časem ze zadaných hodnot.
  • Date(year, month, day) - skrácenější verze DateTime().
  • localtime(arg) - pokud nezadáte žádný argument, vrací to samé jako now(). Argumentem může být číslo, které určuje čas objektu DateTime v sekundách po čase 1970-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
>>> from mx.DateTime import *
>>> 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í:

>>> import mx.DateTime
>>> 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.

>>> cas.strftime('%c')
'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í.

>>> cas.strftime('Prave je %H.%M.%S')
'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>
Komentář Hlášení chyby
Created: 11.9.2005
Last updated: 1.9.2015
Tato stánka používá ke svému běhu cookies, díky kterým je možné monitorovat, co tu provádíte (ne že bych to bez cookies nezvládl). Také vás tu bude špehovat google analytics. Jestli si myslíte, že je to problém, vypněte si cookies ve vašem prohlížeči, nebo odejděte a už se nevracejte :-). Prohlížením tohoto webu souhlasíte s používáním cookies. Dozvědět se více..