Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:fechas

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

Tiempos

time.time() representa una hora en el día, independientemente del día del que se trate.

Un uso típico es ver la duración de la ejecución de un programa.

from time import time
 
t0 = time()
 
for x in range(100000):
    a = x
 
t1 = time()    
 
t1 - t0
 
# Resultado:
# 0.007186412811279297
informatica/programacion/python/fechas.txt · Última modificación: por tempwin