Ú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:

  1. La funció data_a_llista(data) que donada una instància de la classe datetime.date amb 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]
    
  2. La funció data_a_string(data) que donada una instància de la classe datetime.date amb 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'
    
  3. 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)
    
  4. 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
    
  5. 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
    
  6. 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
    
  7. 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.