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:
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.
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:
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:
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):
dt = datetime.now()
print(dt.isoformat())
2016-06-18T21:37:10.303386
Formateo munual (inglés por defecto):
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:
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():
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:
print(pytz.all_timezones)
Ahora por ejemplo para crear la hora actual en Tokyo (Japón) haríamos lo siguiente:
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