Python을 사용하여 월의 마지막 날 찾기
- Python의 캘린더 라이브러리를 사용하여 월의 마지막 날 찾기
- Python에서 DateTime 모듈을 사용하여 월의 마지막 날 찾기
- 화살표 라이브러리를 사용하여 월의 마지막 날 찾기
- Pandas 모듈을 사용하여 월의 마지막 날 찾기
- 결론
매달 마지막 날을 기억하고 그것에 대해 확신하는 것은 어려울 수 있습니다. 몇 줄의 코드로 어떤 달의 마지막 날을 보여주는 컴퓨터 프로그램이 있어야 한다고 생각해 본 적이 있습니까?
이 기사에서는 표준 Python 라이브러리를 사용하여 월의 마지막 날을 쉽게 찾을 수 있는 Python 프로그램을 만드는 방법을 알려줍니다. calendar
및 datetime
과 같은 내장 라이브러리와 pandas
및 arrow
와 같은 일부 타사 라이브러리를 사용하여 Python에서 월의 마지막 날을 찾습니다.
Python의 캘린더 라이브러리를 사용하여 월의 마지막 날 찾기
이 섹션에서는 내장된 Python 라이브러리 calendar
를 사용하여 월의 마지막 날을 찾습니다.
이 프로그램은 calendar
하위 함수 monthrange
를 사용합니다. 이 하위 함수는 year
와 month
라는 두 개의 매개 변수 인수를 취하고 (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)
로 대체됩니다. 그렇지 않으면 date
는 month=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를 사용하여 월의 마지막 날을 찾습니다. 여기에서 프로그램은 datetime
및 pandas
라는 두 개의 라이브러리 패키지를 가져옵니다.
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
결론
이 기사에서는 datetime
및 calendar
와 같은 내장 라이브러리와 arrow
및 pandas
와 같은 타사 라이브러리를 사용하여 Python에서 월의 마지막 날을 찾는 다양한 방법을 배웠습니다.