プロジェクト

全般

プロフィール

Pythonで日時を扱う

標準ライブラリ

UNIX時間(1970年1月1日を起点とする通算秒数)を扱うtimeモジュールと、タイムゾーン、ISO8601表現形式や日時の計算も扱うdatetimeモジュールがあります。

文字列から日時へ

ISO8601形式文字列から日時へ

datetime.fromisoformat()関数を使います。

t = datetime.datetime.fromisoformat("2024-12-25T23:45:01")
tz = datetime.datetime.fromisoformat("2024-12-25T23:45:01Z")
tj = datetime.datetime.fromisoformat("2024-12-25T23:45:01+09:00")
  • tは時刻帯が未指定
  • tz, tjは時刻帯を指定

その他の文字列から日時へ

datetime.strptime()関数を使います。

t = datetime.datetime.strptime("2024/12/25 23:45", "%Y/%m/%d %H:%M")
tz = datetime.datetime.strptime("2024/12/25 23:45Z", "%Y/%m/%d %H:%M%z")
  • strptime関数には、tzinfoを受け取る引数がないので、時刻帯を指定するには、文字列の末尾に時刻帯の情報を付けることで対処

日時から文字列へ

datetimeのisoformatメソッドを使って、ISO8601形式の文字列化をします。

t = datetime.datetime(2024,12,25,23,45, tzinfo=datetime.UTC)
print(t.isoformat())  # 2024-12-25T23:45:00+00:00

任意の形式で文字列化

datetimeのstrftimeメソッドを使って、任意に定義する形式で文字列化します。

t = datetime.datetime(2024,12,25,23,45, tzinfo=datetime.UTC)
print(t.strftime("%Y/%m/%d %H:%M:%S"))   # 2024/12/25 23:45:00

日時の取得

今の日付・時刻

import datetime

today = datetime.date.today() # 実行する環境のタイムゾーンにおける年月日取得
now = datetime.datetime.now() # 実行する環境のタイムゾーンにおける年月日時分秒を取得

UTC時刻での取得

import datetime

now = datetime.datetime.now(datetime.UTC)
  • datetime.UTCは、Python 3.11で追加された、datetime.timezone.utcのエイリアス

UNIX時刻から日時

import datetime

time = datetime.datetime.fromtimestamp(0) # 実行する環境のタイムゾーンにおける年月日時分秒(例えばJSTでは:1970,1,1,9,0,0)
time = datetime.datetime.fromtimestamp(0, datetime.UTC) # UTCでの年月日時分秒 1970,1,1,0,0,0 
  • utcfromtimestamp関数は deprecated となっている

日時からUNIX時刻

import datetime

utime = datetime.datetime(2024, 2, 14, 12, 30, 45, tzinfo=datetime.UTC).timestamp()

日時と日付・時刻の変換

時刻(time)から日時(datetime)へ

  • combine
from datetime import date, datetime, time
today = date.today()
noon = time(12,0,0)
noon_today = datetime.combine(today, noon)

年間通算日

datetime から年間通算日への変換
import datetime
dt = datetime.datetime(2023, 3, 19, 4, 0, 0)  # 2023-03-19T04:00:00Z
print(dt.strftime("%j"))

078 と表示されます。

date から年間通算日への変換
import datetime
day = datetime.date(2023, 3, 19)  # 2023-03-19
print(day.strftime("%j"))

078 と表示されます。

年間通算日から datetime への変換

datetimeモジュールでは、ISO8601表現形式の年間通算日(ordinal date)形式 "YYYY-DDD" に対応していないので、書式を明示的に指定します。

import datetime
datetime.datetime.strptime('2023-078', "%Y-%j") # datetime(2023, 3, 19, 0, 0)
toordinalメソッドについて

datetimeおよびtimeクラスにはtoordinalメソッドが用意されていますが、これは西暦1年1月1日を起点とする通算日数を返すので、その年の年間通算日にはなりません。

比較

日時同士の比較

  • datetime型の変数は、比較演算子で日時の比較ができる


約1ヶ月前に更新