yoshikenがプログラミングや日記、ポエムを書いていくページです


Pythonのdatetime型におけるTZの難しさ。

Pythonのdatetimeには二種類あったという話

今このブログのsitemapを作ってるんですが、そのついでにdate周りを整備しようと思ったんですが、案外めんどくさかった。というかいままで意識してなかっった。

まずはdatetimeオブジェクトには二種類ある。

datetime --- 基本的な日付型および時間型 — Python 3.10.4 ドキュメント

ざっくり説明すると

  • aware
    • timezoneを含む
  • naive
    • timezoneを含まない

実際のコードで試す

$python
02:10:18 2022
Python 3.8.5 (default, Sep  3 2020, 07:12:45)
[Clang 12.0.0 (clang-1200.0.31.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime, timezone
>>> now = datetime.now()
>>> print(type(now))
<class 'datetime.datetime'>
>>> print(now.tzinfo)
None
>>> print(now.isoformat())
2022-05-22T02:10:39.987654
>>> utc_now = datetime.now(timezone.utc)
>>> print(type(utc_now))
<class 'datetime.datetime'>
>>> print(utc_now.tzinfo)
UTC
>>> print(utc_now.isoformat())
2022-05-21T17:11:28.897259+00:00

こんな感じ。

でも 2022-05-22 02:13strptime したやつはどうしても naive になってしまう。

2022-05-22T01:53:00+09:00 みたいにして datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%S%z') にすると aware になるっぽい。

えーめんどくさい…なんかいい感じにならんか考えよう…

追記

BBQしに行った。雨降ってたけどなんやかんや良かった。川と森が良い。

飯能河原 バーベキュー器材レンタルと食材の販売店舗|West River BBQ (ウエストリバーBBQ)

かーらーのー

温泉入った。満足。

埼玉県飯能市の天然温泉施設「宮沢湖温泉 喜楽里 別邸」

ただ、片道2時間はきついねぇ〜