본문 바로가기
Development/Python

[Python] 오늘 날짜, 영업일 계산(Business day, Working day), 두 날짜 사이의 리스트, 달의 마지막 날 출력하기

by 성딱이 2021. 9. 30.
반응형
# 라이브러리 import
import numpy as np
from datetime import datetime
from pandas.tseries.offsets import BDay
from pandas.tseries.offsets import MonthEnd, BMonthEnd

판다스 라이브러리를 활용하여, 간단하게 오늘날짜 및 영업일 계산, 그리고 달의 마지막 날을 구해보겠다.

 

 

1. 오늘 날짜 'YYYY-MM-DD' 형식으로 뽑기
today = datetime.today()
now = datetime.now()
todayDate = today.strftime('%Y-%m-%d')
nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')

print(todayDate)
# result : '2021-09-30'

print(nowDatetime)
# results '2021-09-30 12:20:03'

 

 

2. 오늘날짜 기준, Working Day로 혹은 Business Day로 (영업일) 며칠 전, 며칠 후의 날짜 계산하기
(datetime.today() - BDay(1)).strftime('%Y-%m-%d')
# result : '2021-09-29'

# BDay 연산은 datetime 형식끼리 가능하다. 따라서 이미 String화 되어있는 날짜와 연산을 하기 위해선 datetime 형식으로 변환 후 연산 할 수 있도록 한다.
transDate = (pd.to_datetime(todayDate) - BDay(1)).strftime(%Y-%m-%d)
# >>> '2021-09-29'

transDateTime = (pd.to_datetime(nowDatetime) - BDay(1)).strftime(%Y-%m-%d %H:%M:%S)
# >>> '2021-09-29 12:20:03'

 

 

3. 날짜간 일 수 계산 (+ 영업일로 계산)
# 그냥 날짜로 계산
pd.to_datetime('2022-02-01') - pd.to_datetime('2022-02-11')
# >>> Timedelta('-10 days +00:00:00')

# 영업일로 계산
np.busday_count(begindates='2022-02-01', enddates='2022-02-11')
# >>> 8

 

4. 두 날짜 사이의 날짜 리스트 얻기
# 두 날짜간 날짜 리스트 반환
pd.date_range(start='2022-02-01', end='2022-02-11')
# >>>
# DatetimeIndex(['2022-02-01', '2022-02-02', '2022-02-03', '2022-02-04',
#                '2022-02-05', '2022-02-06', '2022-02-07', '2022-02-08',
#                '2022-02-09', '2022-02-10', '2022-02-11'],
#               dtype='datetime64[ns]', freq='D')



# 두 날짜간 영업일 리스트 반환
pd.bdate_range(start='2022-02-01', end='2022-02-11')
# >>>
# DatetimeIndex(['2022-02-01', '2022-02-02', '2022-02-03', '2022-02-04',
#                '2022-02-07', '2022-02-08', '2022-02-09', '2022-02-10',
#                '2022-02-11'],
#               dtype='datetime64[ns]', freq='B')

 

5. 달의 마지막 날 계산하기
# 이 달의 마지막 날 구하기
'''
MonthEnd(숫자) -> 달의 마지막 날 구하기
BMonthEnd(숫자) -> 달의 마지막 영업일 구하기

# 숫자 만큼의 달을 Shifting 하며 구할 수 있다.

'''
(datetime.today() + MonthEnd()).strftime('%Y-%m-%d')
# today : '2021-09-18'
# results : '2021-09-30'

 

(부록) 달의 마지막 날 계산시 위의 함수가 동작 되지 않을 때.

 

 

끄읏

 

반응형

댓글