Módulo Python Datetime

El módulo Datetime nos permite trabajar con objetos de fecha y hora. Proporciona tres tipos de datos adicionales: date, time y datetime.

import datetime

date()

datetime.date(year: int, month: int, day: int)

El método date devuelve un objeto de fecha con los atributos year, month y day:

from datetime import date
# Crear un objeto de fecha
obj = date(2022, 12, 1)
# Acceder al atributo year
obj.year
2022
obj.month
12
obj.day
1

time()

datetime.time(hour: int, minute: int, second: int)

El método time devuelve un objeto de hora con los atributos hour, minute, second, microsecond y tzinfo:

from datetime import time
# Crear un objeto de hora
obj = time(10, 20, 33)
# Acceder al atributo hour
obj.hour
10
obj.second
33
obj.microsecond
0

datetime()

datetime.datetime(year, month, day, hour, minute, second)

El datetime devuelve un objeto con los atributos de los objetos date y time:

from datetime import datetime
# Crear un objeto datetime con fecha y hora
obj = datetime(2024, 12, 1, 15, 35, 59)
# Acceder al atributo year
obj.year
2024
obj.month
12
obj.day
1
obj.hour
15
obj.second
59

now() y today()

Los métodos now y today devuelven un objeto datetime con el día y la hora exactos del sistema:

from datetime import datetime
# Obtener fecha y hora actuales
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 19, 56, 49, 589806)

Debido a que el objeto devuelto es un datetime, podemos acceder a los atributos date y time:

now.date()
datetime.date(2022, 7, 23)
now.time()
datetime.time(19, 56, 49, 589806)
now.year
2022
now.month
7
now.day
23
now.hour
19
now.minute
56
now.second
49
now.microsecond
589806

Además, now puede tomar un objeto timezone como parámetro opcional:

from datetime import datetime, timezone
# Obtener la hora UTC actual
datetime.now(timezone.utc)
datetime.datetime(2022, 7, 24, 0, 20, 8, 265634, tzinfo=datetime.timezone.utc)

Si no se especifica un parámetro timezone, now usará la zona horaria del sistema por defecto.

strftime() y strptime()

Puede transformar fácilmente entre cadenas y objetos datetime con los métodos strftime y strptime.

strftime()

strftime nos permite crear cadenas con formato legible a partir de un objeto datetime de Python:

from datetime import datetime
# Obtener la fecha y hora actuales para ejemplos de formato
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 20, 31, 19, 751479)
# Formatear datetime como día-mes-año con mes abreviado
now.strftime("%d-%b-%Y")
'23-Jul-2022'
# Formatear datetime como día-mes-año con mes numérico
now.strftime("%d-%m-%Y")
'23-07-2022'
# Formatear datetime como mes/día/año
now.strftime("%m/%d/%Y")
'07/23/2022'
# Formatear datetime con fecha y hora
now.strftime("%b/%d/%Y - %H:%M:%S")
'Jul/23/2022 - 20:31:19'

Puede que encuentre extrañas las cadenas pasadas a strftime, pero es bastante fácil entender su significado. Por ejemplo, %m/%d/%Y devolverá el mes, el día y el año separados por / (07/23/2022).

strptime()

El método strptime crea un objeto datetime a partir de una cadena.

Este método acepta dos parámetros:

obj.strptime(datetime_string, format)
  • Una cadena que representa un objeto datetime.
  • El código de formato de python equivalente a esa cadena.
from datetime import datetime

# Analizar cadena a objeto datetime
datetime_str = '12-Jul-2023'
datetime.strptime(datetime_str, '%d-%b-%Y')
datetime.datetime(2023, 7, 12, 0, 0)
# Analizar cadena con fecha y hora
datetime_str = 'Jul/12/2023 - 14:38:37'
datetime.strptime(datetime_str, "%b/%d/%Y - %H:%M:%S")
datetime.datetime(2023, 7, 12, 14, 38, 37)

Códigos de Formato

DirectivaSignificadoEjemplo
%aDía de la semana como nombre abreviado de la configuración regional.Sun, Mon, …, Sat (en_US)
%ADía de la semana como nombre completo de la configuración regional.Sunday, Monday, …, Saturday (en_US)
%wDía de la semana como número decimal, donde 0 es Domingo y 6 es Sábado.0, 1, …, 6
%dDía del mes como número decimal con relleno de ceros.01, 02, …, 31
%bMes como nombre abreviado de la configuración regional.Jan, Feb, …, Dec (en_US)
%BMes como nombre completo de la configuración regional.January, February, …, December (en_US)
%mMes como número decimal con relleno de ceros.01, 02, …, 12
%yAño sin siglo como número decimal con relleno de ceros.00, 01, …, 99
%YAño con siglo como número decimal.0001, 0002, …, 2013, 2014, …, 9998, 9999
%HHora (reloj de 24 horas) como número decimal con relleno de ceros.00, 01, …, 23
%IHora (reloj de 12 horas) como número decimal con relleno de ceros.01, 02, …, 12
%pEquivalente local de AM o PM.AM, PM (en_US)
%MMinuto como número decimal con relleno de ceros.00, 01, …, 59
%SSegundo como número decimal con relleno de ceros.00, 01, …, 59
%fMicrosegundo como número decimal, relleno a la izquierda con ceros.000000, 000001, …, 999999
%zDesplazamiento UTC en el formato ±HHMM[SS[.ffffff]] (cadena vacía si el objeto es ingenuo).(empty), +0000, -0400, +1030, +063415, -030712.345216
%ZNombre de la zona horaria (cadena vacía si el objeto es ingenuo).(empty), UTC, GMT
%jDía del año como número decimal con relleno de ceros.001, 002, …, 366
%UNúmero de semana del año (Domingo como primer día de la semana) como número decimal con relleno de ceros. Todos los días de un año nuevo que preceden al primer domingo se consideran en la semana 0.00, 01, …, 53
%WNúmero de semana del año (Lunes como primer día de la semana) como número decimal. Todos los días de un año nuevo que preceden al primer lunes se consideran en la semana 0.00, 01, …, 53
%cRepresentación de fecha y hora apropiada para la configuración regional.Tue Aug 16 21:30:00 1988 (en_US)
%xRepresentación de fecha apropiada para la configuración regional.08/16/88 (None)
%XRepresentación de hora apropiada para la configuración regional.21:30:00 (en_US)
%%Un carácter '%' literal.%

timedelta()

El objeto timedelta representa la diferencia entre dos fechas u horas.

from datetime import datetime

# Crear dos objetos datetime
date_1 = datetime.strptime('12-Jul-2023', '%d-%b-%Y')
date_2 = datetime.strptime('01-Jan-2024', '%d-%b-%Y')

# Calcular la diferencia (devuelve timedelta)
difference = date_2 - date_1
difference
datetime.timedelta(days=173)
# Obtener el número de días del timedelta
difference.days
173

timedelta puede sumar days, seconds y microseconds a un objeto datetime:

from datetime import datetime, timedelta

# Obtener la fecha y hora actuales para operaciones con timedelta
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 21, 25, 2, 341081)
# Sumar 10 días y 15 segundos a la fecha y hora actuales
now + timedelta(days=10, seconds=15)
datetime.datetime(2022, 8, 2, 21, 25, 17, 341081)

Y puede restar days, seconds y microseconds a un objeto datetime:

from datetime import datetime, timedelta

# Obtener la fecha y hora actuales para el ejemplo de resta
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 21, 25, 2, 341081)
# Restar 10 días y 15 segundos a la fecha y hora actuales
now - timedelta(days=10, seconds=15)
datetime.datetime(2022, 7, 13, 21, 59, 41, 100883)

Enlaces relevantes

Morty Proxy This is a proxified and sanitized view of the page, visit original site.