Encuentra el último día del mes usando Python

Jay Shaw 10 octubre 2023
  1. Encuentre el último día del mes usando la biblioteca de calendarios en Python
  2. Encuentre el último día del mes usando el módulo DateTime en Python
  3. Encuentre el último día del mes usando la biblioteca de flechas
  4. Encuentre el último día del mes usando el módulo Pandas
  5. Conclusión
Encuentra el último día del mes usando Python

Puede ser un desafío recordar el último día de cada mes y estar seguro de ello. ¿Alguna vez has considerado que debería haber un programa de computadora que te muestre el último día de cualquier mes de cualquier año con unas pocas líneas de código?

Este artículo nos enseñará cómo crear programas de Python que nos permitan encontrar fácilmente el último día del mes utilizando las bibliotecas estándar de Python. Usaremos bibliotecas integradas como calendar y datetime y algunas bibliotecas de terceros como pandas y arrow para encontrar el último día del mes en Python.

Encuentre el último día del mes usando la biblioteca de calendarios en Python

En esta sección, utilizaremos la biblioteca integrada de Python calendario para encontrar el último día del mes.

Este programa utiliza la subfunción calendario rango de meses, que toma dos argumentos de parámetro, año y mes, y devuelve un valor de par de claves de (week_day_of_first_day, number_of_days).

El primer valor indica el primer día de la semana del mes (0 es lunes y 6 es domingo), mientras que el segundo valor muestra el último día del mes.

import calendar

last_day = calendar.monthrange(2000, 1)
print(last_day)

Enero tiene 31 días, y en el año 2000, el primer día era sábado.

Producción :

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
(5, 31)

Process finished with exit code 0

Revisemos el programa dando algunos años bisiestos como entrada para ver si encuentra correctamente el último día del mes en Python.

import calendar

last_day1 = calendar.monthrange(2000, 2)
print(last_day1)

last_day2 = calendar.monthrange(2004, 2)
print(last_day2)

Los años bisiestos se mostrarán en consecuencia.

Producción :

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
(1, 29)
(6, 29)

Process finished with exit code 0

Encuentre el último día del mes usando el módulo DateTime en Python

La biblioteca datetime también es una biblioteca incorporada que se utiliza para encontrar el último día del mes en Python.

Resta un día del primer día de cada mes para encontrar el último día del mes

Este programa encuentra el último día del mes cuando el mes y el año se proporcionan como entrada.

import datetime

year = 2001
month = 2

v = datetime.date(year + int(month / 12), (month % 12) + 1, 1) - datetime.timedelta(
    days=1
)

print(v)

Desglosemos el código:

La primera línea importa la biblioteca datetime. Se crean dos variables, año y mes, que toman entrada para el año y el mes. La subfunción datetime.date() toma tres valores dentro del parámetro como la fecha.

Este programa utiliza la lógica de que retroceder un día desde el primer día del mes nos lleva al último día del mes anterior. Esto nos da el último día de todos los meses excepto diciembre, que nos lleva al último día del año anterior.

El programa agrega un 1 al año de diciembre para combatir este problema usando la línea:

datetime.date(year + int(month / 12))

Asimismo, para el mes, si es diciembre, el programa suma un 1 al módulo de mes % 12.

Esto establece el mes en 1, que tiene el mismo número de días que 12 sin cambiar el año actual. Por último, se resta un día de la fecha actual mediante la función datetime.timedelta(days=1).

Producción :

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2001-02-28

Process finished with exit code 0

Otra forma de hacerlo utilizando la biblioteca datetime es crear un método y devolver dos valores, uno para diciembre y otro para el resto de los meses. Veamos el programa a continuación.

import datetime


def last_day_of_month(date):
    if date.month == 12:
        return date.replace(day=31)
    return date.replace(month=date.month + 1, day=1) - datetime.timedelta(days=1)


print(last_day_of_month(datetime.date(2022, 10, 25)))

Se crea un método last_day_of_month con un parámetro date. Dentro de la sentencia if, se comprueba si el mes es diciembre usando fecha.mes == 12.

Si la condición es verdadera, el día se reemplaza por date.replace(day=31). De lo contrario, la fecha se reemplaza con el primer día y el mes siguiente incrementando mes=fecha.mes + 1, luego se le resta un día, llevando la fecha a la última fecha del mes dado.

A continuación se muestra un ejemplo:

return date.replace(month=date.month + 1, day=1) - datetime.timedelta(days=1)

Por último, se llama al método pasando una fecha datetime.date(), y luego se imprime. Ofrece una solución más directa que el ejemplo anterior.

Producción :

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2022-10-31

Process finished with exit code 0

Use fechas precargadas almacenadas en una matriz usando un bucle for para encontrar el último día del mes

Otra instancia del uso de la biblioteca datetime es crear una matriz de los últimos días del mes, ejecutarla en un bucle y dejar que la biblioteca datetime filtre las fechas no válidas.

Vea el código de ejemplo a continuación.

from datetime import datetime


def find_last_day(year, month):
    end_days = [31, 30, 29, 28, 27]
    for i in end_days:
        try:
            date = datetime(year, month, i)
        except ValueError:
            continue
        else:
            return date.date()
    return None


print(find_last_day(2020, 2))

El programa utiliza un método find_last_day() con dos parámetros, año y mes. En una matriz end_days, se almacenan los últimos días posibles.

Se crea un bucle for que se ejecuta para el número de elementos en end_days. Dentro de un bloque try, una variable almacena la fecha usando la subfunción datetime().

El valor de mes y año se establece como parámetro, y en el valor de día, se almacena i.

Dentro del bloque excepto, se da una condición para ValueError, que descarta el valor i en la variable fecha por un valor de mes no válido. Luego, el bucle se vuelve a ejecutar usando continuar.

El método devuelve la fecha dentro de un bloque si no si se encuentra un valor válido. Por último, se utiliza return None para que el método no devuelva ningún otro valor.

El programa busca el valor apropiado de día de la matriz dada. Para diciembre, el bucle encuentra 31 y devuelve el valor; para meses como noviembre, solo es posible 30, por lo que regresa ese día.

Del mismo modo, el 31 y el 30 de febrero no pueden ser posibles, por lo que el ciclo los recorre. Si el año dado es un año bisiesto, el bucle devuelve 29; de lo contrario, se devuelve 28.

Por último, se llama al método pasando el mes de febrero y el año 2020.

Producción :

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2020-02-29

Process finished with exit code 0

Como podemos ver, febrero de 2020 fue un año bisiesto.

Imprima el último día de todos los meses de un año calendario para encontrar el último día del mes

La biblioteca datetime también se puede usar para encontrar el último día de todos los meses en Python en un año calendario e imprimirlos todos. Veamos el programa.

import datetime


def month_end(date):

    next_month = date.replace(day=28) + datetime.timedelta(days=4)

    return next_month - datetime.timedelta(days=next_month.day)


for month in range(1, 13):
    print(month_end(datetime.date(2022, month, 1)))

Desglosemos el código:

Se crea un método month_end que toma como parámetro date. Dentro de este método, una variable next_month toma la fecha y reemplaza el día con 28 usando date.replace(day=28) ya que cada mes tiene un mínimo de 28 días.

Después de reemplazar el valor, se agregan 4 días a este valor para cambiar la fecha al primer o segundo día del mes siguiente, según la cantidad de días del mes anterior.

Supongamos que la fecha actual es 2000, 3, 4, y el valor del día para este mes es 4. Restar el valor de este día de la fecha lo llevará al último día del mes anterior - 2000, 2, 28; esta lógica se utiliza aquí en este programa.

El día en la variable next_month se resta de sí mismo y se devuelve del método usando la sintaxis:

return next_month - datetime.timedelta(days=next_month.day)

Hemos creado un bucle for que usa la instancia month para ejecutar un bucle en un rango de (1,13). Dentro del bucle, se llama al método month_end pasando datetime.date, proporcionando al método el año y el día.

El mes se reemplaza por la instancia mes utilizada dentro del bucle for para pasar 12 meses al método.

for month in range(1, 13):
    print(month_end(datetime.date(2022, month, 1)))

Producción :

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2022-01-31
2022-02-28
2022-03-31
2022-04-30
2022-05-31
2022-06-30
2022-07-31
2022-08-31
2022-09-30
2022-10-31
2022-11-30
2022-12-31

Process finished with exit code 0

En la salida se muestran todos los últimos días de un año calendario.

Encuentre el último día del mes usando la biblioteca de flechas

Esta es una biblioteca de Python de terceros que se puede usar para la manipulación de fechas. Se utilizará para encontrar el último día del mes en Python.

El programa utiliza la subfunción de flecha utcnow() para obtener la hora universal actual. Encuentra el techo del mes usando ceil('mes').fecha.

import arrow

print(arrow.utcnow().ceil("month").date())

Producción :

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2022-10-31

Process finished with exit code 0

El código da la última fecha del mes actual.

Encuentre el último día del mes usando el módulo Pandas

Esta sección utiliza una biblioteca de Python de terceros, Pandas, para encontrar el último día del mes. Aquí, el programa importa dos paquetes de biblioteca: datetime y pandas.

Se crea un método check_month_end que toma como parámetro fecha. Este método toma el parámetro fecha y suma los días restantes de ese mes usando fecha + pd.offsets.MonthEnd(0).

A continuación se muestra el código de ejemplo:

from datetime import datetime

import pandas as pd


def check_month_end(date):
    return date + pd.offsets.MonthEnd(0)


print(check_month_end(datetime(2005, 2, 6)))

print(check_month_end(datetime(2004, 2, 29)))

Producción :

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
2005-02-28 00:00:00
2004-02-29 00:00:00

Process finished with exit code 0

La salida tiene un formato de marca de tiempo de Pandas y muestra el último día del mes.

Comprobar si un día es el último día del mes usando Pandas

Los pandas se pueden usar para verificar si una fecha dada es el último día del mes. A diferencia de los pocos programas anteriores, este toma la entrada del usuario y verifica si el día dado es válido o no.

El programa usa el valor del parámetro para verificar si coincide con el final del mes usando date + pd.offsets.MonthEnd(0) == date. El método devuelve valores booleanos cuando se llama.

Consulte el código de ejemplo proporcionado.

from datetime import datetime

import pandas as pd


def check_month_end(date):
    return date + pd.offsets.MonthEnd(0) == date


print(check_month_end(datetime(1996, 5, 16)))
print(check_month_end(datetime(1996, 5, 31)))

Producción :

"C:\Users\Win 10\venv\Scripts\python.exe" "C:/Users/Win 10/main.py"
False
True

Process finished with exit code 0

Conclusión

En este artículo, hemos aprendido las diversas formas de encontrar el último día del mes en Python utilizando bibliotecas integradas como datetime y calendar, así como bibliotecas de terceros como arrow y pandas.

Artículo relacionado - Python DateTime