• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

python datetime

date: 2022-08-31 excerpt: python datetimeの使い方

tag: datetimepython


python datetimeの使い方

概要

  • ISO8601(RFC3339)という企画がある
    • UTCの例
      • YYYY-mm-ddTHH:MM:SSZ
      • YYYY-mm-ddTHH:MM:SS+00:00:
    • JSTの例
      • YYYY-mm-ddTHH:MM:SS+09:00
  • ISO8601に適合した出力を得るには、.isoformat()関数が必要
    • デフォルトではmicrosecondsまで表示されるので、timespec="seconds"まで表示される

各種初期化方法

  • 日付の粒度で初期化
    • datetime.date(2099, 11, 3)
  • yyyy-mm-dd HH:MM:SSの粒度で初期化
    • datetime.datetime(2099, 11, 3, 10, 30, 15, 0)
      • 最後はmicro seconds
  • 現在の時刻で初期化
    • datetime.now()

具体例

import datetime
import pytz

dt = datetime.datetime.now()

# pythonデフォルトのisoformat
print(dt.isoformat()) # 2022-08-31T04:45:33.576946

# UTCでISO8601を適応した例
# JavaScript互換なので、開発時には便利
# システムのTZが優先されることもあり、使用に注意が必要
print(dt.strftime("%Y-%m-%dT%H:%M:%SZ")) # 2022-08-31T04:45:33Z

# JSTでISO8601を適応した例
jst_dt = dt.astimezone(pytz.timezone('Asia/Tokyo'))
print(jst_dt.isoformat()) # 2022-08-31T13:32:50.675778+09:00

# secondsでオフセットをつけて、インラインで時刻の誤解がなく、文字列として出力する
print(datetime.datetime.now().astimezone(pytz.timezone("UTC")).isoformat(timespec='seconds')) # 2022-09-01T06:18:11+00:00 (日本時間の15:18に実行)

注意点

  • strftimeで出力される値はタイムゾーンが設定されている場合は暗黙的にそのタイムゾーンの出力になる
    • つまり、dt.strftime("%Y-%m-%dT%H:%M:%SZ")は場合によっては期待した動作をしない
    • isoformat()で得られた文字列を加工するほうが安全

Google Colab

  • python-datetime-iso8601

参考

  • PythonでISO8601(RFC3339)を扱う/Qiita
  • 日時のフォーマット(ISO 8601)/Qiita
  • Pythonの UTC ⇔ JST、文字列(UTC) ⇒ JST の変換とかのメモ/Qiita


datetimepython Share Tweet