Ús del mòdul datetime¶
En Python, si volem treballar amb dates o temps podem fer servir el mòdul datetime. Esbrineu quines classes incorpora aquest mòdul i què representen, quins atributs té cada classe i per a què serveixen els seus mètodes.
Dissenyeu les funcions següents i deseu-les al fitxer dates.py:
La funció data_a_llista(data) que donada una instància de la classe
datetime.dateamb una data, retorna aquesta data com una llista amb tres enters: dia, mes i any:>>> import dates >>> import datetime >>> d1 = datetime.date (2016, 3, 25) >>> dates.data_a_llista(d1) [25, 3, 2016] >>> d2 = datetime.date (1900, 1, 1) >>> dates.data_a_llista(d2) [1, 1, 1900]
La funció data_a_string(data) que donada una instància de la classe
datetime.dateamb una data, retorna aquesta data com un string amb el format “dd/mm/aaaa”:>>> dates.data_a_string(d1) '25/03/2016' >>> dates.data_a_string(d2) '01/01/1900'
La funció string_a_data(s) que, donat un string que representa una data en format “dd/mm/aaaa”, retorna aquesta data representada com una instància de la classe
datetime.date:>>> dates.string_a_data ('25/03/2016') datetime.date(2016, 3, 25) >>> dates.string_a_data ('01/01/1900') datetime.date(1900, 1, 1)
La funció data_dif(data1, data2) que, donades dues dates, representades com a instàncies de la classe
datetime.date, retorna un enter corresponent als dies que han transcorregut entre la primera (data1) i la segona (data2):>>> d1 = datetime.date (2016, 3, 25) >>> d2 = datetime.date (1900, 1, 1) >>> d3 = datetime.date (2016, 2, 29) >>> dates.data_dif(d1, d3) -25 >>> dates.data_dif(d2, d3) 42427
Utilitzant les funcions anteriors, dissenyeu la funció tempus_fugit (data1, data2) que, donats dos strings que representen dates en format “dd/mm/aaaa”, retorni el nombre de dies transcorreguts entre la primera (data1) i la segona data (data2):
>>> dates.tempus_fugit('25/03/2016', '29/02/2016') -25 >>> dates.tempus_fugit('01/01/1900','29/02/2016') 42427
Dissenyeu una funció temps_dif(inst1, inst2) que, donats dos instants d’un mateix dia, representats com a instàncies de la classe
datetime.time, retorni un enter corresponent als segons que han transcorregut entre el primer (inst1) i el segon (inst2):>>> t1 = datetime.time (10, 25, 30) >>> t2 = datetime.time (10, 35, 30) >>> t3 = datetime.time (11, 0, 0) >>> dates.temps_dif(t1, t2) 600 >>> dates.temps_dif(t2, t3) 1470
Dissenyeu una funció cap_de_setmana(itdies) que, donat un iterador sobre una seqüència de dies, representats com a instàncies de la classe
datetime.date, retorni un altre iterador sobre la seqüència de dies que corresponen a dissabte o diumenge de la seqüència donada. Els elements de l’iterador retornat han de ser tuples de dos elements: el primer element és el dia representat com un string i el segon és un altre string amb els valors'ds.'o'dg.'. Exemples:>>> dia = datetime.date(2023, 3, 1) >>> dies = datetime.timedelta(1) >>> it = map(lambda num: dia+dies*num, range(31)) >>> it1 = dates.cap_de_setmana(it) >>> for d in it1: ... d ('2023-03-04', 'ds.') ('2023-03-05', 'dg.') ('2023-03-11', 'ds.') ('2023-03-12', 'dg.') ('2023-03-18', 'ds.') ('2023-03-19', 'dg.') ('2023-03-25', 'ds.') ('2023-03-26', 'dg.')
Avís
Per a resoldre aquest apartat no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar els elements d’un iterador.
Nota
Disposeu de jocs de proves al fitxer test-dates.txt i de solucions al fitxer dates.py.