Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:fechas

¡Esta es una revisión vieja del documento!


Python: Fechas

import datetime as dt
# from datetime import datetime

Creación

Fecha actual:

d = dt.datetime.now()
 
print(d)
# Resultado
# 2020-11-13 15:53:49.883446

Al imprimir un objeto de tipo datetime obtenemos año, mes, día, minutos, segundos y microsegundos.

Fecha:

d = dt.date(2020, 12, 31)

Utilizando el método strptime() (convierte un string a un objeto de fecha):

d = datetime.strptime("01/01/2020", "%Y-%m-%d")

Fecha y hora:

from datetime import datetime
d = datetime(2020, 12, 31, 12, 59, 59)

Para poder ver la fecha como una cadena de caracteres:

str(d)
 
# Resultado:
# 2020-12-31 12:59:59

Otra forma de formatear una fecha es utilizando el método strftime(), que convertirá el objeto en un string:

fecha.strftime("%Y-%m-%d %H:%M:%S")
 
# Resultado:
# '2021-11-04 16:53:36'

Zona horaria

Los objetos DateTime en Python no tienen en cuenta la zona horaria debemos hacer que sean conscientes. Para ello nos ayudamos del módulo pytz:

from datetime import datetime
import pytz
 
# Listas las diferentes zonas horarias que tiene Pytz:
for tz in pytz.all_timezones:
    print(tz)
 
# Fecha y hora actual en la zona horaria actual
now = datetime.now()
 
print(now)
 
# Resultado
# 2020-11-13 17:16:04.477517
 
# Creamos una hora en UTC (aunque no tiene información sobre zona horaria)
utcnow = datetime.utcnow()
 
# Asignamos una zona horaria al objeto anterior
utcnow = utcnow.replace(tzinfo=pytz.utc)
 
print(utcnow)
 
# Resultado
# 2020-11-13 16:16:04.477517+00:00

Por regla general, se recomienda guardar las fechas en UTC y hacer posteriormente las conversiones a la zona horaria deseada

Para convertir zonas horarias:

madrid = utcnow.astimezone(pytz.timezone("Europe/Madrid"))
 
print(madrid)

Extracción

import datetime as dt
 
x = dt.datetime.now()
 
print(x.year) # Extrae el año
print(x.month) # Extrae el mes
print(x.day) # Extrae el día
print(x.hour) # Extrae la hora
print(x.minute) # Extrae los minutos

Atributos

  • .year: extrae el año de una fecha.
  • .month: extrae el mes.
  • .day: extrae el día.
  • .hour: horas.
  • .minute: minutos.
  • .second: segundos.
d = dt.date(2020, 12, 31)
 
d.year # 2020
d.month # 12
d.day # 31

Formatos

Para formatear la fecha, se puede utilizar el método strftime():

print(d.strftime("%A") # Nombre del día de la semana (en inglés)
Directiva Descripción Ejemplo
%a Día de la semana (breve) Wed
%A Día de la semana Wednesday
%Y Año 2019
%m Número del mes (con cero inicial) 03
%d Día del mes (con cero inicial) 09
%H Hora (con cero inicial) 02
%M Minutos (con cero inicial) 58
%S Segundos (con cero inicial) 59
%f Microsegundos 131488
%b Nombre del mes (breve) Dec
%B Nombre del mes December
%Z Zona horaria CST

Comparación

Con objetos de tipo DateTime se pueden hacer comparaciones utilizando los operadores de comparación (<, >, ==…)

import datetime 
 
# date and time in yyyy/mm/dd hh:mm:ss format 
d1 = datetime.datetime(2020, 5, 13, 22, 50, 55) 
d2 = datetime.datetime(2020, 7, 13, 22, 50, 55)
 
print(d1 < d2) # True
 
print(d1 > d2) # False

Fecha

Si solo queremos comparar la fecha (año, mes y día):

import datetime 
 
# date and time in yyyy/mm/dd hh:mm:ss format 
d1 = datetime.datetime(2020, 5, 13, 22, 50, 55) 
d2 = datetime.datetime(2020, 7, 13, 22, 50, 55)
 
print(d1.date() < d2.date()) # True
 
print(d1.date() > d2.date()) # False

Tiempo

Para comparar solo el tiempo (horas, minutos, segundos…)

import datetime as dt
 
# date and time in yyyy/mm/dd hh:mm:ss format 
d1 = dt.datetime(2020, 5, 13, 22, 50, 55) 
d2 = dt.datetime(2020, 5, 13, 7, 50, 55)
d3 = dt.datetime(2020, 6, 13, 22, 50, 55)
 
print(d1.time() == d2.time()) # False
print(d1.time() == d3.time()) # True
print(d1.time() < d2.time()) # False
print(d1.time() < d3.time()) # False
print(d1.time() > d2.time()) # True
print(d1.time() > d3.time()) # False

Intervalos

Los objetos timedelta representan duraciones de tiempo, lo cual permite realizar operaciones aritméticas con las fechas.

from datetime import timedelta
 
nuevo_dia = cualquier_dia + timedelta(days=1)
 
# añade un día a ''cualquier_dia''

Podríamos hacer comparaciones:

cualquier_dia > nuevo_dia
 
# Resultado:
# False
informatica/programacion/python/fechas.1636041714.txt.gz · Última modificación: por tempwin