PythonとAWS Lambdaを使用して現在時刻を取得する方法について説明します。この記事は、Pythonのdatetime
モジュールとAWS Lambdaの特性を理解することを目指しています。
AWS Lambdaと現在時刻
AWS Lambdaでは、デフォルトのタイムゾーンがUTCです。したがって、日本時間を取得するためには、タイムゾーンを明示的に設定する必要があります。
Pythonのdatetime
モジュールを使用して現在時刻を取得する基本的なコードは次のとおりです。
from datetime import datetime
now = datetime.now()
print(now)
しかし、このコードをAWS Lambdaで実行すると、UTC時間(日本時間から-9時間された値)が取得されます。
タイムゾーンの設定
日本時間を取得するためには、タイムゾーンを設定する必要があります。Pythonのdatetime
モジュールには、タイムゾーン情報を扱うためのtimezone
とtimedelta
という2つのクラスがあります。
以下のコードは、日本時間を設定する例です。
from datetime import datetime, timezone, timedelta
# 日本時間を設定
TZ_JST = timezone(timedelta(hours=+9))
# datetime.nowの引数にtzinfoを渡す
now = datetime.now(TZ_JST)
print(now)
しかし、datetime.now()
メソッドはタイムゾーン情報を引数として受け取ることはできません。そのため、上記のコードはエラーになります。
正しい現在時刻の取得方法
正しい現在時刻の取得方法は、datetime.now()
を使用してUTC時間を取得し、その後でtimedelta
を使用して9時間を加算することです。
以下のコードは、その例です。
from datetime import datetime, timedelta
# UTC時間を取得
now = datetime.now()
# 9時間を加算
now_jst = now + timedelta(hours=9)
print(now_jst)
この方法であれば、AWS Lambdaでも正確に日本時間を取得することができます。
まとめ
AWS LambdaとPythonを使用して現在時刻を取得する際には、タイムゾーンの設定に注意が必要です。特に、AWS LambdaではデフォルトのタイムゾーンがUTCであるため、日本時間を取得するためにはタイムゾーンを明示的に設定する必要があります。また、datetime.now()
メソッドはタイムゾーン情報を引数として受け取ることはできないため、UTC時間を取得した後でtimedelta
を使用して時間を加算する方法を使用します。.