Innovate With Data

데이터로 더 큰 가치를 제공합니다.

맨땅에 프로그래밍/Python 복기장

Python으로 미국 현지 Summer time 확인 자동화 하기 (feat. pytz)

데이터위자드 2024. 4. 15. 23:13
반응형

Python으로 미국 현지 Summer time 확인 자동화 하기 (feat. pytz)

미국 주식 RPA를 만들었다. 하지만, Summer time으로 시간이 주기적으로 변경되었다.

 

 안녕하세요? 데이터위자드입니다.

 해외 주식의 열기가 어느 때보다 뜨거운 요즘입니다. 저 역시 모 증권사의 API와 Python을 이용하여 미국 주식투자 RPA를 작성하여 운영 중인데요. 처음 미국 주식시장 RPA를 구상하면서 한 가지 문제에 직면하게 되었던 경험을 바탕으로 오늘 이야기를 하도록 하겠습니다.

 

 

미국 주식 투자 RPA든 국내 주식 투자 RPA든 기본적으로 큰틀에서,

 

 

  • Azure 가상 머신으로 특정 시간대 RPA 프로그램 자동으로 실행

  • 주식 투자 RPA는 장이 열리는 시간 ~ 장이 마감되는 시간까지 운영

 

 

로 운영되게 구상하였습니다.

 

 

국내 주식 시장 같은 경우는 일광시간 절약제(소위 Summer time)이라는 것이 없기에 시간이 항시 고정되어 있으나, 미국 같은 경우는 Summer time이 매해 주기적으로 적용과 미적용이 반복되다 보니, 미국 주식시장 시간 또한 주기적으로 변경되는 특성이 있었습니다.

 

 

美 뉴욕 증시 개장 1시간 앞당겨져요 (chosun.com)

 

美 뉴욕 증시 개장 1시간 앞당겨져요

美 뉴욕 증시 개장 1시간 앞당겨져요 10일부터 미국 서머타임 시작... 유럽은 31일 시작

www.chosun.com

 

 

따라서, 매 RPA 실행 시 해당일이 Summer time인지 아닌지를 알아봐야 할 필요가 있었습니다. (물론, Summer time이든 아니든 빠른 시간대를 기준으로 RPA를 구성하면 되지만 어쨌든 해결하고 싶었습니다.  😆)

 

 

그 문제를 해결하기 위해 사용한 Python 라이브러리는 'pytz'입니다.

 

 

pytz · PyPI

 

pytz

World timezone definitions, modern and historical

pypi.org

 

 

pytz를 한마디로 소개하자면, 전 세계의 시간대(Timezone)에 대해서 특화된 기능을 제공하는 라이브러리입니다.

 

 

설치는 간단히,

 

 

pip install pytz

 

 

으로 해줍니다.

 

 

그런 후 즐거운 마음으로 코딩을 해주시면 되겠습니다.

 

신나는 코딩 작업
신나는 코딩 작업

 

 

먼저 pytz와 datetime을 import 해줍니다.

 

 

 
from datetime import datetime, date, timedelta
import pytz
 

 

 

다음은, Newyork 현지시간을 가져와 UTC 시간대와 시차를 계산하는 로직을 구현해 봅니다. 순서는 다음과 같습니다.

 

 

  • pytz 라이브러리를 이용해 뉴욕 현지 시간을 가져오기

  • 뉴욕 현지 시간과 UTC 시간대의 시차를 계산

  • 시간이 4시간이 차이 난다면, 현재 미국 내 Summer time이 적용되었다고 판단

  • Summer time이 적용되었다면, Slack으로 푸시알람 및 RPA 운영 시간대 변경

 

 

밑그림도 작성하였으니, 순서도에 따라 Python을 코딩해 줍니다.

 

       
        us_time = datetime.now(pytz.timezone('America/New_York'))           # 미국 서머타임인지 확인하는 로직
        # pytz의 timezone 매써드를 이용하여 'New_York'의 현지시간을 가져와 datetime.now로 us time 변수 할당
        diff_hour = us_time.utcoffset().total_seconds()/60/60
        # us_현지시각와 utcoffset method를 이용해 UTC 현지 시간과 시간 차이를 계산함          # 써머타임시 -4.0 임
       
        us_summertime = False
        if diff_hour == -4.0:
            us_summertime = True
        # us_summetime 체크 Flag를 생성하고 UTC와 Newyork의 시차가 4시간인 경우 해당 Flag를 True 변경
       
        if us_summertime == True:
            slackOut('미국 써머타임 중!')       # Slack Alarm
            doSomthingWithRPA()                # RPA 시간대 변경
 

 

 

간단하게 미국 Summer time을 알아보는 로직을 작성하였습니다.

 

 

참 쉽죠?
참 쉽죠?

 

 

잠깐 TMI 드리자면,

 

UTC는 Coordinated Universal Time으로 통상적으로 그리니치 천문대 시간(GMT)과 동일한 의미로 사용되곤 합니다. (정확히는 GMT와 UTC는 다른 개념입니다.)

 

 

또한, 예제에서는 미국 현지 시간을 이용해 미국 내 일광시간절약제 적용 여부를 확인해 보았으나, 응용한다면 유럽이나 다른 국가의 서머타임 여부도 확인가능하실 것이라 생각됩니다.

 

 

pytz.timezone('America/New_York')

 

 

매개변수 'America/New_York'만 변경해 주시면 되겠네요.

해당 매개변수에 대한 내용은 pytz 페이지에서 확인하시기 바랍니다.

 

pytz · PyPI

 

pytz

World timezone definitions, modern and historical

pypi.org

 

 

참고하시어, 즐거운 데이터 생활 되시길 바랍니다.

 

 

* 본 포스팅에서 언급된 라이브러리, 단체는 필자와 무관함을 알립니다.

 

 

 

 

도움이 되셨다면, 왼쪽 아래 '💗' 클릭 부탁드립니다. 감사합니다.

반응형