본문 바로가기

Data Science/Analysis Study

[python/datetime] 기준이 되는 일자/날짜 구하기(오늘, 어제, 1일 전, 2일 전, 3일 전, 1달 전)

SMALL

 

안녕하세요! 데코입니다!

 

오늘은 파이썬에서 많이 다루는 datetime를 이용해서

 

기준이 되는 일자/날짜를 구하는 방법에 대하여 포스팅하려고 합니다!

 

 

날짜 계산에는 주로 " datetime " 패키지에서  " datetime, timedelta " 모듈을 이용해요!

 

 - datetime : datetime 객체를 생성하거나 날짜 문자열을 파싱하며, 날짜와 관련된 계산을 수행
 - timedelta : 두 날짜 간의 시간 차이를 계산하여 이전 또는 목표 요일을 결정하는 데 사용

 

1. 전체 코드

저는 실행 기준으로 1영업일 전의 값을 가져오게 하는 코드를 만들고 싶었어요!

또한 주말은 "주말"이라는 출력 결과만 나타내게 해주고 싶었습니다!

 

일단 python으로 만든 전체 코드부터 보여드릴게요!

from datetime import datetime, timedelta

def get_previous_date():
    today = datetime.now()
    weekday = today.weekday()  # 월요일 0 ~ 일요일 6

    if weekday in [0]:  # 월요일
        previous_date = today - timedelta(days=3)
    elif weekday in [1, 2, 3, 4]:  # 화요일, 수요일, 목요일, 금요일
        previous_date = today - timedelta(days=1)
    else:  # 토요일, 일요일
  		print("주말")
        return None 

    return previous_date

 

2. 출력 결과

오늘이 2023-12-14(목)으로 가정하고 출력 결과를 나타내볼게요!

# 예제 실행
# 2023-12-14(목) 기준
result = get_previous_date()
print("Previous Date:", result.strftime("%Y-%m-%d"))

 

출력 결과는 아래와 같이 나옵니다!

 

3. 코드 설명

 

1영업일 이전의 날자들을 가져와주고 싶었어요!

단순히 yyyyMMdd 형식의 숫자로 받은 후에 -1을 빼도 비슷한 결과를 retrun 해주겠지만 한계가 존재해서

날짜형식으로 변경 후 계산해 주었어요!

 

한계점 : 월이 변경되어야 하는 상황에서 오류가 발생

단순히 하루 전날의 값을 계산하려고 해도

첫날의 경우는 전월로 넘어가야 하는데, 숫자로 인식을 받으면 이런 계산이 불가능해집니다.

1일인 경우에를 예외처리해서 코딩을 할 수는 있지만, 추천드리진 않아요!

 

예시) 20231201 -1 => 20231200

 

위와 같이 처리가 안 되는 경우가 발생하기 때문에

입력하는 날짜를, 날짜 형식으로 인식을 시켜주고 날짜를 계산하는 함수를 이용해서 계산을 했습니다!

 

저는 하루 전의 영업일의 값을 가져오고 싶어 하니까 가져와야 하는 날짜의 값은 아래와 같아요!

 

월요일이면, 저번주 금요일의 값(3일 전의 값, D-3)

화요일이면, 이번주 월요일의 값(1일 전의 값, D-1)

수요일이면, 이번주 화요일의 값(1일 전의 값, D-1)

목요일이면, 이번주 수요일의 값(1일 전의 값, D-1)

금요일이면, 이번주 목요일의 값(1일 전의 값, D-1)

 

이렇게 나오게 하기 위해서 코드를 작성했습니다!

 

코드가 실행될 때의 날짜를 받아,

날짜의 요일을 파악하고, 요일에 따라 D-3 or D-1을 계산하도록 구현했어요!

 

4. 다른 날짜들 계산하기

제가 약 3년간 데이터 분석을 하면서 날짜 데이터를 다룬 결과 많이 이용한 날짜들은 아래와 같아요!

 

영업일이면 코드가 조금 수정이 필요하겠지만,

지금은 영업일 기준으로 하지 않은 코드를 나타내볼게요!

 

1) 1일 전

예시 날짜 : 2023-12-25

출력 날짜 : 2023-12-24

 

2) 2일 전

예시 날짜 : 2023-12-25

출력 날짜 : 2023-12-23

 

3) 이번달 1일

예시 날짜 : 2023-12-25

출력 날짜 : 2023-12-01

 

4) 저번달 말일

예시 날짜 : 2023-12-25

출력 날짜 : 2023-11-30

 

5) 작년 마지막일 

예시 날짜 : 2023-12-25

출력 날짜 : 2022-12-31

 

from datetime import datetime, timedelta

# 2023-12-25 기준
example_date = datetime(2023, 12, 25)

# 날짜 계산
날짜_1일전 = example_date - timedelta(days=1)
날짜_2일전 = example_date - timedelta(days=2)
날짜_기준월_1일 = example_date.replace(day=1)
날짜_전월_말일 = 날짜_기준월_1일 - timedelta(days=1)
날짜_작년_마지막날 = datetime(example_date.year - 1, 12, 31)

# 날짜 출력
print("출력 날짜:", 날짜_1일전.strftime("%Y-%m-%d"))         # 2023-12-24
print("출력 날짜:", 날짜_2일전.strftime("%Y-%m-%d"))         # 2023-12-23
print("출력 날짜:", 날짜_기준월_1일.strftime("%Y-%m-%d"))    # 2023-12-01
print("출력 날짜:", 날짜_전월_말일.strftime("%Y-%m-%d"))      # 2023-11-30
print("출력 날짜:", 날짜_작년_마지막날.strftime("%Y-%m-%d"))  # 2022-12-31

 

날짜 계산에 주로 사용되는 datetime 패키지에 관해 더 궁금하시면 아래와 같이

datetime의 docs 사이트에서 직접 보시는 것도 추천드려요! ;)

datetime docs

 


 

오늘은 기준이 되는 일자/날짜를 구하고 계산하는 방법과

자주 쓰이는 날짜 및 계산하는 방법도 보여드렸습니다!

 

설명이 어려운 부분 혹은 잘 이해가 안 가는 부분

그리고 더 궁금한 내용이 있다면

 

언제든지 댓글로 남겨주세요!

빠르게 궁금증을 해결해 드릴게요!

 

공감과 댓글은 큰 힘이 됩니다!

오늘도 블로그 방문해 주시고

포스팅 읽어주셔서 감사합니다!

 

다들 오류 없는 파이썬 코딩 해보아요! :)

 

 

LIST