Saltar a contenido
 No os perd谩is mi futuro contenido, seguidme en y Youtube 馃榿

M贸dulo datetime

Este m贸dulo contiene las clases time y datetime esenciales para manejar tiempo, horas y fechas.

Clase datetime

Esta clase permite crear objetos para manejar fechas y horas:

Note

from datetime import datetime

dt = datetime.now()    # Fecha y hora actual

print(dt)
print(dt.year)         # a帽o
print(dt.month)        # mes
print(dt.day)          # d铆a

print(dt.hour)         # hora
print(dt.minute)       # minutos
print(dt.second)       # segundos
print(dt.microsecond)  # microsegundos

print("{}:{}:{}".format(dt.hour, dt.minute, dt.second))
print("{}/{}/{}".format(dt.day, dt.month, dt.year))
datetime.datetime(2016, 6, 18, 21, 29, 28, 607208)
2016
6
18
21
29
28
607208
21:29:28
18/6/2016

Es posible crear un datetime manualmente pasando los par谩metros (year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None). S贸lo son obligatorios el a帽o, el mes y el d铆a.

Note

from datetime import datetime

dt = datetime(2000,1,1)
print(dt)
datetime.datetime(2000, 1, 1, 0, 0)

No se puede cambiar un atributo al vuelo:

Note

dt.year = 3000
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-18-f655491f2afa> in <module>()
----> 1 dt.year = 3000

AttributeError: attribute 'year' of 'datetime.date' objects is not writable

Hay que utilizar el m茅todo replace:

Note

dt = dt.replace(year=3000)
print(dt)
datetime.datetime(3000, 1, 1, 0, 0)

Formateos

Formato autom谩tico ISO (Organizaci贸n Internacional de Normalizaci贸n):

Note

dt = datetime.now()
print(dt.isoformat())
2016-06-18T21:37:10.303386

Formateo munual (ingl茅s por defecto):

Note

dt.strftime("%A %d %B %Y %I:%M")
Saturday 18 June 2016 09:37

C贸digo de los campos

Disponibles en esta enlace: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

Por defecto salen los nombres en ingl茅s, pero podemos cambiar el idioma de configuraci贸n de Python:

Note

import locale

# Idioma "es-ES" (c贸digo para el espa帽ol de Espa帽a)
locale.setlocale(locale.LC_ALL, 'es-ES') 

print(dt.strftime("%A %d %B %Y %I:%M"))
print(dt.strftime("%A %d de %B del %Y - %H:%M"))  # %I 12h - %H 24h
s谩bado 18 junio 2016 09:37
s谩bado 18 de junio del 2016 - 21:37

C贸digo de los pa铆ses disponibles

import locale
print(locale.locale_alias)

Operaciones

Podemos sumar y restar tiempo con la funci贸n timedelta():

Note

from datetime import datetime, timedelta

dt = datetime.now()
print(dt.strftime("%A %d de %B del %Y - %H:%M"))

# Generamos 14 d铆as con 4 horas y 1000 segundos de tiempo
t = timedelta(days=14, hours=4, seconds=1000)

# Lo operamos con el datetime de la fecha y hora actual
dentro_de_dos_semanas = dt + t
print(dentro_de_dos_semanas.strftime("%A %d de %B del %Y - %H:%M"))
hace_dos_semanas = dt - t
print(hace_dos_semanas.strftime("%A %d de %B del %Y - %H:%M"))
s谩bado 18 de junio del 2016 - 21:47
domingo 03 de julio del 2016 - 02:03
s谩bado 04 de junio del 2016 - 17:30

Zonas horarias

Para establecer zonas horarias en nuestras fechas y horas necesitamos instalar el m贸dulo pytz desde Anaconda Prompt:

pip install pytz

Una vez instalado podemos consultar las diferentes zonas horarias disponibles con:

Note

print(pytz.all_timezones)

Ahora por ejemplo para crear la hora actual en Tokyo (Jap贸n) har铆amos lo siguiente:

Note

dt = datetime.now(pytz.timezone('Asia/Tokyo'))
print(dt.strftime("%A %d de %B del %Y - %H:%M"))  # %I 12h - %H 24h
domingo 19 de junio del 2016 - 04:52

脷ltima edici贸n: 2 de Octubre de 2018