問題
Timestreamにてtime
カラムが下記のようにタイムゾーン無し&文字列
として出力される場合があります。
Lambdaで時間処理を行う場合、文字列では不便ですのでJSTに変換しなければなりません。
ですが、単純にstr → date
では変換できない事象が発生しましたので共有したいと思います。
できれば、レイヤーも追加せず簡単に行う方法かつ、python3.9に合うモダンな方法にしたい。
解決策
そのままの状態では、dateフォーマットに合わないことがわかりました。
最初に文字列として取得できるので、末尾の桁数を調整することでやや力技ですが解決できました。
from datetime import datetime
from zoneinfo import ZoneInfo
def convert_timestamp(timestamp):
timestamp_date = datetime.strptime(timestamp[:-10], '%Y-%m-%d %H:%M:%S') # 文字列の末尾を削除して変換する
time_stamp_utc = timestamp_date.astimezone(ZoneInfo("UTC")) # UTCを付与
time_stamp_jst = time_stamp_utc.astimezone(ZoneInfo("Asia/Tokyo")) # JSTに変換
return time_stamp_jst
ZoneInfoについて
AWS lambdaではpython3.9から使用可能になったそうです。まだ情報は多くないですがレイヤーの追加をせずとも使えますので便利です。