Python: DateTime

El módulo datetime nos permite gestionar fechas y horas de forma muy sencilla

Podemos construir una fecha con su hora con el método constructor con el siguiente formato: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0) especificando la fecha y hora, siendo sólo obligatorios el año, el mes y el día o con now() que nos crea con la fecha y hora actuales.

from datetime import datetime

# 10 de junio de 2013 a las 22:43:02
# Sólo son obligatorios el año, el mes y el día
#                AAAA  M  DD  HH  MM  SS
fecha = datetime(2013, 6, 10, 22, 43, 12)

fecha
datetime.datetime(2013, 6, 10, 22, 43, 12)


fecha = datetime.now()

fecha
datetime.datetime(2019, 1, 29, 19, 55, 48, 67435)

Una vez creada la fecha NO podemos modificar los valores por lo que tendremos que volver a crear con la nueva fecha.

Tenemos diversos métodos para obtener cada uno de los valores individuales:

from datetime import datetime

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

print(fecha)              # AAAA-MM-DD HH:MM:SS.microsegundos
print(fecha.year)         # año
print(fecha.month)        # mes
print(fecha.day)          # día

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

print("{}:{}:{}".format(fecha.hour, fecha.minute, fecha.second))
20:5:56

print("{}/{}/{}".format(fecha.day, fecha.month, fecha.year))
29/1/2019

Pero para poder mostrar fechas y horas formateadas de forma muy sencilla y potente tenemos el método strftime(format) que nos permite especificar como se muestra la fecha y hora:

from datetime import datetime

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

print(fecha.strftime("Las %H:%M:%S del %A %d de %B del %Y"))
Las 20:05:56 del Tuesday 29 de January del 2019

Como podemos ver el control es total pudiendo añadir texto y formato que queramos. Para un listado de todos los códigos de formateo tenemos: lista de códigos.

Por defecto el idioma es del sistema, si éste no fuese el correcto o que queremos podemos cambiarlo con locale.

Podemos realizar operaciones y cálculos con las fecha y horas para ello necesitamos importar el método timedelta y crear una variable con timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) que usaremos para operar con una fecha.

from datetime import datetime, timedelta

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

# creamos una variable con 1 semana
una_semana = timedelta(weeks=1)

una_semana_menos = fecha - una_semana
dos_semana_mas = fecha + una_semana + una_semana

print(fecha.strftime("Las %H:%M:%S del %A %d de %B del %Y"))
Las 20:05:56 del Tuesday 29 de January del 2019

print(una_semana_menos.strftime("Las %H:%M:%S del %A %d de %B del %Y"))
Las 20:24:50 del Tuesday 22 de January del 2019

print(dos_semana_mas.strftime("Las %H:%M:%S del %A %d de %B del %Y"))
Las 20:24:50 del Tuesday 05 de February del 2019

Para sacar que hora es en diferentes horarios del planeta podemos hacer lo siguiente:

from datetime import datetime, timedelta
import pytz

# Fecha y hora actual zona local (España)
fecha_local = datetime.now()

# Fecha y hora actual zona Nueva York
fecha_ny = datetime.now(pytz.timezone('America/New_York'))

print(fecha.strftime("Las %H:%M:%S del %A %d de %B del %Y"))
Las 20:38:00 del Tuesday 29 de January del 2019

print(fecha_ny.strftime("Las %H:%M:%S del %A %d de %B del %Y"))
Las 14:38:07 del Tuesday 29 de January del 2019
Importante
Es necesario instalar el módulo pytz mediante pip3 install pytz.

Si queremos mostrar todas las zonas horarias:

print(pytz.all_timezones)

Más información en: datetime

Retro

Lugares

Redes

Sistemas

Varios