Python

[Python] cron schedule로 datetime 구하기

비번변경 2023. 2. 13. 20:25

croniter

                      _ _
  ___ _ __ ___  _ __ (_) |_ ___ _ __
 / __| '__/ _ \| '_ \| | __/ _ \ '__|
| (__| | | (_) | | | | | ||  __/ |
 \___|_|  \___/|_| |_|_|\__\___|_|

base 시각으로부터 cron 스케줄에 일치하는 datetime을 구할 수 있는 라이브러리이다.

간단히 사용 방법을 정리해 본다.

 

 

설치 및 import

Python 기본 라이브러리가 아니기 때문에 별도로 설치가 필요하다.

pip install croniter

 

croniter 패키지로부터 필요한 모듈을 import 하여 사용한다.

from croniter import croniter

 

 

기본 사용법

기본적으로 crontier 라이브러리는 생성자와 get_next 함수를 이용하여 사용한다.

croniter는 start_time으로부터 '분 시 초 일 요일'로 이루어진 cron_format을 따라 iterate 되므로 get_next 함수를 반복적으로 사용하여 cron_format에 일치하는 시각을 구할 수 있다. get_next 함수에는 반환받을 데이터 타입을 float 또는 datetime으로 지정한다.

from datetime import datetime
from croniter import croniter

cron_format = '0 0 * * *'
iter = croniter(cron_format, datetime.now())
print(iter.get_next(datetime))
print(iter.get_next(datetime))
print(iter.get_next(datetime))

만약 역으로 start_time 이전의 시각의 구할 때는 get_prev 함수를 사용한다.

from datetime import datetime

from croniter import croniter

cron_format = '0 0 * * *'
iter = croniter(cron_format, datetime.now())
print(iter.get_prev(datetime))
print(iter.get_prev(datetime))
print(iter.get_prev(datetime))

 

 

기간 내 일치하는 시각 목록

range 함수와 유사하게 croniter_range 함수를 사용하여, 기간 내 cron_format과 일치하는 시각을 찾는다.

from datetime import datetime, timedelta

from croniter import croniter
from croniter import croniter_range

end_date = datetime.now()
start_date = end_date - 10 * timedelta(days=1)
for dt in croniter_range(start_date, end_date, cron_format):
    print(dt)

generator로 반환되어 list 등으로 사용하기 위해서는 형 변환이 필요하다.

from datetime import datetime, timedelta

from croniter import croniter
from croniter import croniter_range

cron_format = '0 0 * * *'
end_date = datetime.now()
start_date = end_date - 10 * timedelta(days=1)
print(type(croniter_range(start_date, end_date, cron_format)))

 

 

참고 문서

https://pypi.org/project/croniter/

https://github.com/kiorky/croniter