Restar datetime en Python

Rayven Esplanada 28 diciembre 2020
Restar datetime en Python

Este tutorial introducirá cómo realizar la sustracción datetime en Python.

Exploraremos diferentes salidas después de la sustracción, como la salida del número de segundos, minutos, horas o años de la diferencia de los dos objetos datetime proporcionados.

Usar el módulo datetime para restar el datetime en Python

datetime es un módulo en Python que soportará funciones que manipulen el objeto datetime.

Inicializar un objeto datetime toma tres parámetros requeridos como datetime.datetime(year, month, day). También acepta parámetros opcionales en forma de horas, minutos, segundos, microsegundos y zona horaria.

datetime también tiene la función now(), que inicializa datetime actual en el objeto.

Restando dos objetos datetime se obtendrá la diferencia del número de días, y la diferencia de tiempo, si la hay.

from datetime import datetime

then = datetime(1987, 12, 30, 17, 50, 14)  # yr, mo, day, hr, min, sec
now = datetime(2020, 12, 25, 23, 13, 0)

print(now - then)

Resultado:

12055 days, 5:10:00

El resultado significa que las dos fechas están separadas por 12055 días y 5 horas y 10 minutos.

Para convertir este resultado en diferentes formatos, primero tendríamos que convertir el timedelta en segundos. El objeto datetime tiene un método incorporado datetime.total_seconds() que convierte el objeto en el total de segundos que contiene.

Aquí está el código fuente completo para la sustracción datetime usando el módulo datetime y sus funciones.

from datetime import datetime


def getDifference(then, now=datetime.now(), interval="secs"):

    duration = now - then
    duration_in_s = duration.total_seconds()

    # Date and Time constants
    yr_ct = 365 * 24 * 60 * 60  # 31536000
    day_ct = 24 * 60 * 60  # 86400
    hour_ct = 60 * 60  # 3600
    minute_ct = 60

    def yrs():
        return divmod(duration_in_s, yr_ct)[0]

    def days():
        return divmod(duration_in_s, day_ct)[0]

    def hrs():
        return divmod(duration_in_s, hour_ct)[0]

    def mins():
        return divmod(duration_in_s, minute_ct)[0]

    def secs():
        return duration_in_s

    return {
        "yrs": int(yrs()),
        "days": int(days()),
        "hrs": int(hrs()),
        "mins": int(mins()),
        "secs": int(secs()),
    }[interval]


then = datetime(1987, 12, 30, 17, 50, 14)  # yr, mo, day, hr, min, sec
now = datetime(2020, 12, 25, 23, 13, 0)

print("The difference in seconds:", getDifference(then, now, "secs"))
print("The difference in minutes:", getDifference(then, now, "mins"))
print("The difference in hours:", getDifference(then, now, "hrs"))
print("The difference in days:", getDifference(then, now, "days"))
print("The difference in years:", getDifference(then, now, "yrs"))

Lo primero que hace el código es inicializar 2 fechas separadas para la substracción y llamar a la función varias veces con diferentes salidas cada vez. En el caso de all, devolverá una salida que obtiene la diferencia basada en todos los casos de años a segundos.

La función divmod() acepta dos números como el dividendo y el divisor y devuelve una tupla del cociente y el resto entre ellos. Sólo se necesita el cociente, y por eso sólo se utiliza el índice 0 a través del código.

Resultado:

The difference in seconds: 1041052966
The difference in minutes: 17350882
The difference in hours: 289181
The difference in days: 12049
The difference in years: 33

Ahora tenemos la diferencia entre dos objetos datetime dentro de varios marcos de tiempo diferentes.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artículo relacionado - Python DateTime