Dominando datetime en Python: Guía Práctica de Fechas, Horas y Zonas Horarias
Dominando datetime en Python
Descubre cómo trabajar con fechas y horas en Python a través de ejemplos prácticos y explicaciones claras.
Video: datetime en Python – Trabaja con Fechas y Horas
El módulo datetime de Python proporciona herramientas poderosas para manipular fechas y horas. A continuación recorremos tareas comunes, desde obtener el momento actual hasta formateo y manejo de zonas horarias.
Ejemplo 1: Obtener Fecha y Hora Actual
import datetime
datetime_object = datetime.datetime.now()
print(datetime_object)
La salida se verá como:
2018-12-19 09:26:03.478039
Aquí importamos el módulo con import datetime. La clase datetime contiene un método now() que devuelve la fecha y hora local.
Ejemplo 2: Obtener Fecha Actual
import datetime
date_object = datetime.date.today()
print(date_object)
La salida será:
2018-12-19
Usamos today() de la clase date para obtener la fecha actual del calendario.
Explorando el módulo datetime
Ejecuta dir(datetime) para listar todos los atributos y clases:
import datetime
print(dir(datetime))
Salida:
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']
Clases clave incluyen date, time, datetime y timedelta.
Clase datetime.date
La clase date representa una fecha de calendario (año, mes, día).
Ejemplo 3: Crear un Objeto Date
import datetime
d = datetime.date(2019, 4, 13)
print(d)
Resultado:
2019-04-13
Aquí date() es un constructor que acepta year, month y day como argumentos.
La variable a es una instancia de date.
Importando solo la clase date:
from datetime import date
a = date(2019, 4, 13)
print(a)
Ejemplo 4: Fecha Actual
Usa el classmethod today():
from datetime import date
today = date.today()
print("Fecha actual =", today)
Ejemplo 5: Desde Timestamp
Un timestamp Unix cuenta segundos desde 1970-01-01 UTC. Conviértelo con fromtimestamp():
from datetime import date
timestamp = date.fromtimestamp(1326244364)
print("Fecha =", timestamp)
Salida:
Fecha = 2012-01-11
Ejemplo 6: Acceder a Año, Mes, Día
from datetime import date
today = date.today()
print("Año actual:", today.year)
print("Mes actual:", today.month)
print("Día actual:", today.day)
datetime.time
La clase time almacena una hora de reloj sin fecha.
Ejemplo 7: Crear Objetos Time
from datetime import time
a = time()
print("a =", a)
b = time(11, 34, 56)
print("b =", b)
c = time(hour=11, minute=34, second=56)
print("c =", c)
d = time(11, 34, 56, 234566)
print("d =", d)
Resultado:
a = 00:00:00 b = 11:34:56 c = 11:34:56 d = 11:34:56.234566
Ejemplo 8: Inspeccionar Componentes de Time
from datetime import time
a = time(11, 34, 56)
print("hora =", a.hour)
print("minuto =", a.minute)
print("segundo =", a.second)
print("microsegundo =", a.microsecond)
Salida:
hora = 11 minuto = 34 segundo = 56 microsegundo = 0
datetime.datetime
La clase datetime combina información de fecha y hora.
Ejemplo 9: Crear un Objeto Datetime
from datetime import datetime
# año, mes, día
A = datetime(2018, 11, 28)
print(A)
# especificación completa
B = datetime(2017, 11, 28, 23, 55, 59, 342380)
print(B)
Resultado:
2018-11-28 00:00:00 2017-11-28 23:55:59.342380
Año, mes y día son obligatorios; hora, minuto, segundo y microsegundo default a cero.
Ejemplo 10: Inspeccionar Componentes y Timestamp
from datetime import datetime
A = datetime(2017, 11, 28, 23, 55, 59, 342380)
print("año =", A.year)
print("mes =", A.month)
print("día =", A.day)
print("hora =", A.hour)
print("minuto =", A.minute)
print("timestamp =", A.timestamp())
Salida:
año = 2017 mes = 11 día = 28 hora = 23 minuto = 55 timestamp = 1511913359.34238
datetime.timedelta
Un objeto timedelta representa una duración entre dos fechas u horas.
Ejemplo 11: Diferencia Entre Fechas y Horas
from datetime import datetime, date
T1 = date(year=2018, month=7, day=12)
T2 = date(year=2017, month=12, day=23)
T3 = T1 - T2
print("T3 =", T3)
T4 = datetime(year=2018, month=7, day=12, hour=7, minute=9, second=33)
T5 = datetime(year=2019, month=6, day=10, hour=5, minute=55, second=13)
T6 = T4 - T5
print("T6 =", T6)
print("tipo de T3 =", type(T3))
print("tipo de T6 =", type(T6))
Salida:
T3 = 201 days, 0:00:00 T6 = -333 days, 1:14:20 tipo de T3 = <class 'datetime.timedelta'> tipo de T6 = <class 'datetime.timedelta'>
Ejemplo 12: Restando Objetos Timedelta
from datetime import timedelta
T1 = timedelta(weeks=2, days=5, hours=1, seconds=33)
T2 = timedelta(days=4, hours=11, minutes=4, seconds=54)
T3 = T1 - T2
print("T3 =", T3)
Salida:
T3 = 14 days, 13:55:39
Ejemplo 13: Timedelta Negativo
from datetime import timedelta
T1 = timedelta(seconds=33)
T2 = timedelta(seconds=54)
T3 = T1 - T2
print("T3 =", T3)
print("abs(T3) =", abs(T3))
Salida:
T3 = -1 day, 23:59:39 abs(T3) = 0:00:21
Ejemplo 14: Segundos Totales en un Timedelta
from datetime import timedelta
T = timedelta(days=5, hours=1, seconds=33, microseconds=233423)
print("segundos totales =", T.total_seconds())
Salida:
segundos totales = 435633.233423
Puedes sumar fechas, multiplicar un timedelta por un número y dividirlo por un float para escalar duraciones.
Formateo y Parseo de Fechas
Diferentes locales usan formatos de fecha variados (ej. mm/dd/yyyy en EE.UU. vs dd/mm/yyyy en UK). Los métodos strftime() y strptime() de Python ayudan a convertir entre objetos datetime y cadenas formateadas.
strftime() de Python – datetime a cadena
from datetime import datetime
now = datetime.now()
# Hora:minuto:segundo
T = now.strftime("%H:%M:%S")
print("hora:", T)
# Formato US
S1 = now.strftime("%m/%d/%Y, %H:%M:%S")
print("S1:", S1)
# Formato UK
S2 = now.strftime("%d/%m/%Y, %H:%M:%S")
print("S2:", S2)
Salida típica:
hora: 04:34:52 S1: 12/26/2018, 04:34:52 S2: 26/12/2018, 04:34:52
Códigos de formato comunes: %Y año, %m mes, %d día, %H hora, %M minuto, %S segundo.
strptime() de Python – cadena a datetime
from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)
Salida:
date_string = 21 June, 2018 date_object = 2018-06-21 00:00:00
Aquí %d es día, %B nombre completo del mes y %Y año.
Conciencia de Zona Horaria
Para aplicaciones que deben mostrar o calcular horas en diferentes zonas, evita cálculos manuales y usa la librería pytz.
from datetime import datetime
import pytz
local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))
tz_NY = pytz.timezone('America/New_York')
dt_NY = datetime.now(tz_NY)
print("NY:", dt_NY.strftime("%m/%d/%Y, %H:%M:%S"))
tz_London = pytz.timezone('Europe/London')
dt_London = datetime.now(tz_London)
print("London:", dt_London.strftime("%m/%d/%Y, %H:%M:%S"))
Salida de muestra:
Local: 12/20/2018, 13:10:44 NY: 12/20/2018, 08:10:44 London: 12/20/2018, 13:10:44
Los objetos datetime_NY y datetime_London contienen timestamps conscientes de zona horaria.
python
- Dominando tipos de datos en Python: Guía práctica
- Dominando operadores en Python: Guía completa
- Dominando la sentencia pass en Python: Guía práctica
- Dominando argumentos de funciones en Python: Posicionales, por palabra clave y por defecto
- Dominando Diccionarios en Python: Creación, Manipulación y Técnicas Avanzadas
- Dominando Iteradores en Python: Cómo Funcionan y Cómo Crear los Tuyos
- Explicación de Closures en Python: Cómo las Funciones Anidadas Capturan Variables
- Obtener la Fecha y Hora Actual en Python: Guía Práctica
- Python: Obtener Hora Actual y Datos de Zona Horaria Fácilmente
- Dominar time.sleep() en Python: Mejores Prácticas, Multihilo y Ejemplos Reales
- Visión general de Python: Lenguaje de alto nivel, legible, interactivo y orientado a objetos