以下関数にはタイムゾーンを意識した日時オブジェクトを渡す必要があります。
サンプルコードでは、まず日本時間の日時オブジェクトを作成し、それを関数に渡してニューヨーク時間に変換した上で、市場が開いているかどうかを判定します。
変換のプログラムは多々ありますかこのプログラムでの処理のポイントは、指定された時間を米国時間に変換しマーケットが開いているかどうかを確認する処理になっています。
休場日(祝日など)はこの関数では考慮されていませんので、実際のシステムで使用する場合はこれらの点も考慮する必要があります。
import pytz
from datetime import datetime, timedelta
from pytz import timezone
# 休場かどうか判定する関数
def is_market_opened(aware_datetime):
"""
aware_datetime :タイムゾーンが設定されたdatetime
"""
# ニューヨークのタイムゾーンを設定
ny_tz = timezone('America/New_York')
# 日本時間からニューヨーク時間に変換
ny_datetime = aware_datetime.astimezone(ny_tz)
# サマータイムが適用されているか確認
is_dst = ny_datetime.dst() != timedelta(0)
# サマータイムの場合の開市と閉市時間
# summer time (utc) : 21-21
# winter time (utc) : 22-22
dst_close_hour = 17
dst_open_hour = 17
# 現在の時間が市場の開市時間と閉市時間の間にあるか確認
if ny_datetime.weekday() == 4 and ny_datetime.hour >= dst_close_hour:
# 金曜日の閉市時間後
return False
elif ny_datetime.weekday() == 6 and ny_datetime.hour < dst_open_hour:
# 日曜日の開市時間前
return False
elif ny_datetime.weekday() == 5:
# 土曜日は常に閉市
return False
else:
# それ以外の時間
return True
# 日本時間の日時オブジェクトを作成
jst_tz = timezone('Asia/Tokyo')
jst_datetime = datetime.now(jst_tz)
# 休場かどうかを判定
market_status = is_market_opened(jst_datetime)
# 結果を表示
print("Market Opened:", market_status)
コメント