0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Lambdaで現在日時(処理年月日時)を取得したい

Last updated at Posted at 2022-10-31

経緯

Lambdaで処理年月日時を取得する際につまづいたので記述する。

datetimeモジュールのオブジェクト

  • datetime :日付と時刻を扱う
  • date:日付を扱う
  • time:時刻を扱う
  • timedelta:時間差を扱う

間違った例 1

Python
from datetime import datetime
    # 処理年月日を取得
    processingDate = datetime.datetime.today()
    # エラー文
    AttributeError: type object 'datetime.datetime' has no attribute 'datetime'

そもそも

  • from --- import ~~~文を理解してなかった
  • モジュールとオブジェクトの概念もよくわかってなかった

ため適当に書いてた(笑)
※from datetime import datetimeと書いたら メソッドの先頭は省略できる。(むしろ省略しないと怒られる)
正)

Python
from datetime import datetime
    processingDate = datetime.today()
    # 出力
    2022-10-31 22:09:50.533899

※Lambdaの場合、これだけだとUTC時間(日本時間から-9時間された値)が取得されてしまう。

間違った例 2

lambdaで時刻を扱う場合、実行環境(UTC)に引っ張られるため日本時間を扱いたい際は必ず timezoneオブジェクト(tzinfoのサブクラス)を用いる。

Python
from datetime import datetime, timezone, timedelta
    # 日本時間を設定
    TZ_JST = timezone(timedelta(hours=+9))

    # datetime.todayの引数にtzinfoを渡してやれば取得できる と思っていたが…
    processingDate = datetime.today(TZ_JST)

    # エラー文
    TypeError: datetime.today() takes no arguments (1 given)

エラー文からも読み取れる通り、公式にも ↓

datetime.today()
このメソッドの機能は now() と等価ですが、tz 引数はありません。

引数にいれたらいけるやろという安直な考えではダメだった…
調べてみると Aware オブジェクトNaive オブジェクト なる概念が存在するらしいが
ここではそこまで書く気力がないので割愛する。

最終的な処理

結局、いろいろ苦戦しながらも調べていたら下記の処理方法に落ち着いた。

Python
from datetime import datetime, timedelta
    processingDate = datetime.today() + timedelta(hours=9)
    # 出力
    2022-11-01 08:54:11.720274

無理やり、取得した日時にtimedeltaオブジェクトで9時間足している。

まあ、やりたいことはできたからおk。

参考ページ

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?