Python을 사용하여 월의 마지막 날 찾기

Jay Shaw 2023년10월10일
  1. Python의 캘린더 라이브러리를 사용하여 월의 마지막 날 찾기
  2. Python에서 DateTime 모듈을 사용하여 월의 마지막 날 찾기
  3. 화살표 라이브러리를 사용하여 월의 마지막 날 찾기
  4. Pandas 모듈을 사용하여 월의 마지막 날 찾기
  5. 결론
Python을 사용하여 월의 마지막 날 찾기

매달 마지막 날을 기억하고 그것에 대해 확신하는 것은 어려울 수 있습니다. 몇 줄의 코드로 어떤 달의 마지막 날을 보여주는 컴퓨터 프로그램이 있어야 한다고 생각해 본 적이 있습니까?

이 기사에서는 표준 Python 라이브러리를 사용하여 월의 마지막 날을 쉽게 찾을 수 있는 Python 프로그램을 만드는 방법을 알려줍니다. calendardatetime과 같은 내장 라이브러리와 pandasarrow와 같은 일부 타사 라이브러리를 사용하여 Python에서 월의 마지막 날을 찾습니다.

Python의 캘린더 라이브러리를 사용하여 월의 마지막 날 찾기

이 섹션에서는 내장된 Python 라이브러리 calendar를 사용하여 월의 마지막 날을 찾습니다.

이 프로그램은 calendar 하위 함수 monthrange를 사용합니다. 이 하위 함수는 yearmonth라는 두 개의 매개 변수 인수를 취하고 (week_day_of_first_day, number_of_days)의 키 쌍 값을 반환합니다.

첫 번째 값은 해당 월의 첫 번째 평일(0은 월요일, 6은 일요일)을 나타내고 두 번째 값은 해당 월의 마지막 날을 나타냅니다.

import calendar

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

1월은 31일이며 2000년에는 첫 번째 날이 토요일이었습니다.

출력:

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

Process finished with exit code 0

Python에서 달의 마지막 날을 올바르게 찾는지 확인하기 위해 윤년을 입력으로 제공하여 프로그램을 확인합시다.

import calendar

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

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

그에 따라 윤년이 표시됩니다.

출력:

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

Process finished with exit code 0

Python에서 DateTime 모듈을 사용하여 월의 마지막 날 찾기

datetime 라이브러리는 Python에서 월의 마지막 날을 찾는 데 사용되는 내장 라이브러리이기도 합니다.

매월 1일에서 하루를 빼서 그 달의 마지막 날 구하기

이 프로그램은 월과 연도가 입력된 달의 마지막 날을 찾습니다.

import datetime

year = 2001
month = 2

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

print(v)

코드를 분석해 보겠습니다.

첫 번째 줄은 datetime 라이브러리를 가져옵니다. 연도와 월을 입력하는 두 개의 변수 연도이 생성됩니다. 하위 함수 datetime.date()는 매개변수 내부의 세 가지 값을 날짜로 사용합니다.

이 프로그램은 그 달의 1일에서 하루를 거슬러 올라가면 이전 달의 마지막 날로 가는 논리를 사용합니다. 이렇게 하면 12월을 제외한 모든 달의 마지막 날을 알 수 있으며 이전 연도의 마지막 날로 이동합니다.

이 프로그램은 다음 행을 사용하여 이 문제를 해결하기 위해 12월 연도에 1을 추가합니다.

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

마찬가지로 해당 월이 12월인 경우 프로그램은 month % 12의 계수에 1을 추가합니다.

이것은 현재 연도를 변경하지 않고 12와 같은 일 수를 갖는 1로 월을 설정합니다. 마지막으로 datetime.timedelta(days=1) 함수를 사용하여 현재 날짜에서 하루를 뺍니다.

출력:

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

Process finished with exit code 0

datetime 라이브러리를 사용하여 이를 수행하는 또 다른 방법은 메서드를 만들고 메서드에서 두 개의 값을 반환하는 것입니다. 하나는 12월에 대한 것이고 다른 하나는 나머지 달에 대한 것입니다. 아래 프로그램을 확인해보자.

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)))

메소드 last_day_of_month는 매개변수 날짜와 함께 생성됩니다. if 문 내에서 date.month == 12를 사용하여 월이 12월인지 확인합니다.

조건이 참이면 날짜가 date.replace(day=31)로 대체됩니다. 그렇지 않으면 datemonth=date.month + 1을 증가시켜 첫 번째 날짜와 다음 달로 대체된 다음 날짜에서 하루를 빼서 날짜를 주어진 달의 마지막 날짜로 가져옵니다.

예를 들면 다음과 같습니다.

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

마지막으로 날짜 datetime.date()를 전달하여 메소드를 호출한 다음 인쇄합니다. 이전 예제보다 더 간단한 솔루션을 제공합니다.

출력:

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

Process finished with exit code 0

for 루프를 사용하여 배열에 저장된 미리 로드된 날짜를 사용하여 해당 월의 마지막 날 찾기

datetime 라이브러리를 사용하는 또 다른 인스턴스는 월의 마지막 날 배열을 만들고 루프에서 실행한 다음 datetime 라이브러리가 유효하지 않은 날짜를 필터링하도록 하는 것입니다.

아래 예제 코드를 참조하십시오.

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))

이 프로그램은 find_last_day() 메서드를 연도이라는 두 개의 매개변수와 함께 사용합니다. end_days 배열에는 가능한 마지막 며칠이 저장됩니다.

end_days의 요소 수에 대해 실행되는 for 루프가 생성됩니다. try 블록 내에서 변수는 datetime() 하위 함수를 사용하여 날짜를 저장합니다.

매개 변수에 따라 월과 연의 값을 설정하고 일 값에는 i가 저장됩니다.

except 블록 내에서 ValueError에 대한 조건이 제공되어 잘못된 월 값에 대해 date 변수의 i 값을 버립니다. 그런 다음 계속을 사용하여 루프를 다시 실행합니다.

이 메서드는 유효한 값이 발견되면 else 블록 내부의 date를 반환합니다. 마지막으로 메서드가 다른 값을 반환하지 않도록 return None을 사용합니다.

프로그램은 주어진 배열에서 day의 적절한 값을 검색합니다. 12월의 경우 루프는 31을 찾아 값을 반환합니다. 11월 같은 달은 30개만 가능해서 그날 돌아옵니다.

마찬가지로 2월 31일과 30일은 가능하지 않으므로 루프가 실행됩니다. 주어진 연도가 윤년이면 루프에 의해 29가 반환됩니다. 그렇지 않으면 28이 반환됩니다.

마지막으로 2020년 2월을 넘기면서 메서드를 호출한다.

출력:

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

Process finished with exit code 0

보시다시피 2020년 2월은 윤년이었습니다.

달력 연도의 모든 달의 마지막 날을 인쇄하여 해당 월의 마지막 날 찾기

라이브러리 datetime을 사용하여 달력 연도의 Python에서 모든 달의 마지막 날을 찾아 모두 인쇄할 수 있습니다. 프로그램을 살펴보자.

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)))

코드를 분석해 보겠습니다.

date 매개변수를 사용하는 month_end 메서드가 생성됩니다. 이 메서드 내에서 next_month 변수는 date를 사용하고 date.replace(day=28)를 사용하여 일을 28로 바꿉니다. 매월 최소 28일이 있기 때문입니다.

값이 대체된 후 이 값에 4일이 추가되어 이전 달의 일 수에 따라 날짜를 다음 달의 첫 번째 또는 두 번째 날로 이동합니다.

현재 날짜가 2000, 3, 4이고 이 달의 일 값이 4라고 가정합니다. 날짜에서 이 날짜 값을 빼면 이전 달의 마지막 날인 2000, 2, 28이 됩니다. 이 논리는 이 프로그램에서 사용됩니다.

변수 next_month의 날짜는 자체에서 빼서 다음 구문을 사용하여 메서드에서 반환됩니다.

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

month 인스턴스를 사용하여 (1,13) 범위에서 루프를 실행하는 for 루프를 만들었습니다. 루프 내에서 month_end 메서드는 datetime.date를 전달하여 메서드에 연도와 일을 제공하여 호출됩니다.

월은 메서드에 12개월을 전달하기 위해 for 루프 내에서 사용되는 인스턴스 month로 대체됩니다.

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

출력:

"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

출력에 표시된 것은 역년의 모든 마지막 날입니다.

화살표 라이브러리를 사용하여 월의 마지막 날 찾기

날짜 조작에 사용할 수 있는 타사 Python 라이브러리입니다. Python에서 월의 마지막 날을 찾는 데 사용됩니다.

프로그램은 화살표 하위 함수 utcnow()를 사용하여 현재 세계시를 가져옵니다. ceil('month').date를 사용하여 월의 상한을 찾습니다.

import arrow

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

출력:

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

Process finished with exit code 0

코드는 이번 달의 마지막 날짜를 제공합니다.

Pandas 모듈을 사용하여 월의 마지막 날 찾기

이 섹션에서는 타사 Python 라이브러리인 Pandas를 사용하여 월의 마지막 날을 찾습니다. 여기에서 프로그램은 datetimepandas라는 두 개의 라이브러리 패키지를 가져옵니다.

date 매개변수를 사용하는 check_month_end 메소드가 생성됩니다. 이 메소드는 날짜 매개변수를 사용하고 날짜 + pd.offsets.MonthEnd(0)를 사용하여 해당 월의 남은 날짜를 추가합니다.

다음은 예제 코드입니다.

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)))

출력:

"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

출력은 Pandas 타임스탬프 형식이며 월의 마지막 날을 표시합니다.

Pandas를 사용하여 날짜가 해당 월의 마지막 날인지 확인

Pandas를 사용하여 주어진 날짜가 해당 월의 마지막 날인지 확인할 수 있습니다. 이전의 몇 가지 프로그램과 달리 이 프로그램은 사용자 입력을 받아 주어진 날짜가 유효한지 확인합니다.

프로그램은 매개변수 값을 사용하여 날짜 + pd.offsets.MonthEnd(0) == 날짜를 사용하여 월말과 일치하는지 확인합니다. 메서드는 호출될 때 부울 값을 반환합니다.

제공된 예제 코드를 참조하십시오.

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)))

출력:

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

Process finished with exit code 0

결론

이 기사에서는 datetimecalendar와 같은 내장 라이브러리와 arrowpandas와 같은 타사 라이브러리를 사용하여 Python에서 월의 마지막 날을 찾는 다양한 방법을 배웠습니다.

관련 문장 - Python DateTime