본문 바로가기
Developer/Python

Python 날짜 사이 모든 날짜 리스트로 구하기

by roqkfrlfhr 2021. 1. 8.

Python 날짜 사이 모든 날짜 리스트로 구하기

 

Python에서 시작 날짜와 마지막 날짜 사이에 모든 날짜를 구하는 방법에 대해 알려드리도록 하겠습니다.

 

2가지 방법으로 알려드릴텐데요. 편하신 방법으로 사용하시면 되겠습니다.

2가지 방법은 크게 다르지 않습니다.

 

첫번째 방법

from datetime import datetime, timedelta

def date_range(start, end):
    start = datetime.strptime(start, "%Y-%m-%d")
    end = datetime.strptime(end, "%Y-%m-%d")
    dates = [(start + timedelta(days=i)).strftime("%Y-%m-%d") for i in range((end-start).days+1)]
    return dates

dates = date_range("2021-01-01", "2021-01-09")
print(dates)

# 출력 
# ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08', '2021-01-09']

첫번째 방법은 시작 날짜와 마지막 날짜를 문자열로 받아 두 날짜의 일 수 차이를 구하고,

시작 날짜에 0부터 일 수 차이만큼 하루씩 더하여 모든 날짜를 구하면서,

원하는 형식으로 변환하여 리스트에 담아 반환하여 구하는 방법입니다.

 

두번째 방법

from datetime import datetime
import pandas

def date_range(start, end):
    start = datetime.strptime(start, "%Y-%m-%d")
    end = datetime.strptime(end, "%Y-%m-%d")
    dates = [date.strftime("%Y-%m-%d") for date in pandas.date_range(start, periods=(end-start).days+1)]
    return dates
    
dates = date_range("2021-01-01", "2021-01-09")
print(dates)

# 출력 
# ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08', '2021-01-09']

두번째 방법은 pandas의 date_range를 사용하여 두 날짜 사이의 모든 날짜를 구한 뒤,

날짜를 원하는 형식으로 변환하여 리스트에 담아 반환하여 구하는 방법입니다.

 

※ 아시겠지만 혹시나해서 말씀드리자면,

날짜 형식을 "2021-01-01" 이 아닌 만약 "20200101" 과 같은 날짜 형식으로 사용하고 싶으시다면

"%Y-%m-%d"을 "%Y%m%d" 로 바꾸셔서 사용하시면 됩니다.

 

두 방식이 크게 다르지는 않지만 두번째 방법은 pandas를 사용합니다.

저같은 경우 pandas를 사용하는 두번째 방법을 쓰다가 서버에 올릴 때, pandas가 용량이 꽤나 큰 편이라 용량을 최소화 하기 위해서 첫번째 방법으로 작성하여 사용하였습니다.

편하신 방법으로 사용하시면 좋을 것 같습니다!

 

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청사항은 언제든지 말씀해주세요!

피드백도 언제나 환영입니다!

 

감사합니다.


댓글