TL;DR
datetime モジュールは、日時データを処理するクラスを提供する。日時や時間を扱う型が用意されている。datetime 型は、属性を指定して日付や時間を参照できる。
日付や時間の型には次のようなものがある。
型 | 役割 |
---|---|
datetime | 日時を扱う。日付と時刻を対象とする。 |
date | 日付を扱う。年月日を対象とする |
time | 時間を扱う。時分秒と端数を対象とする。 |
timedelta | 日付、時間の計算を扱う。 |
datetime
datetime のポイント
- 変更不可能(イミュータブル)である
- 日付、時間、曜日の計算を行う
- 引数に日付や時間を指定する
- フォーマット文字列の変換が可能である
- ハッシュ可能である
datetime モジュールは、日時データ(日付と時刻を含む)を処理する。date オブジェクトは、年月日を指定し、その値を属性として取り出すことができる。
主な属性
属性 | 意味 |
---|---|
year | 年 |
month | 月 |
day | 日 |
hour | 時 |
minute | 分 |
second | 秒 |
microsecond | マイクロ秒 |
datetime クラス の構文は次のようになる。引数で指定した年月日時、分秒、マイクロ秒の datetime 型を生成する。次のコードは、分かりやすいように改行している。
datetime(year, month, day, hour=0,
minute=0, second=0, microsecond=0)
数値を入力してみよう。時刻も対象となっている。この例は 2021 年 12 月 24 日午前 3 時 30 分 20 秒を示している。
from datetime import datetime
xmas = datetime(2021, 12, 24, 3, 30, 20)
xmas.hour
# 3
xmas.minute
# 30
xmas.second
# 20
detetime オブジェクトには、isoformat() メソッドがある。中央の T は日付と時刻を分割している。
from datetime import datetime
xmas = datetime(2021, 12, 24, 3, 30, 20)
xmas.isoformat()
# 2021-12-24T03:30:20
now()
datetime の now()メソッドは、現在の日付と時刻を取得できる。
from datetime import datetime
now = datetime.now()
now
# datetime.datetime(2021, 10, 25, 4, 17, 42, 641682)
now.year
# 2021
now.month
# 10
now.day
# 25
now.hour
# 4
now.minute
# 20
now.second
# 13
now.microsecond
# 150095
combine()
combine()は、date オブジェクトと time オブジェクトを結合して、datetime オブジェクトを作ることができる。
from datetime import date, datetime, time
noon = time(12)
this_day = date.today()
noon_today = datetime.combine(this_day, noon)
noon_today
# datetime.datetime(2021, 10, 25, 12, 0)
strptime()
日時データは、strptime()メソッドを使えば、文字列と datetime 型は相互に変換できる。
datetime.strptime("日付文字列", "フォーマット文字")
文字列から datetime 型を生成する。
from datetime import datetime
d = datetime.strptime("2021/10/23 12:01:11", "%Y/%m/%d %H:%M:%S")
print(d)
# 2021-10-23 12:01:11
strptime() の書式指定子一覧表
書式指定子 | 単位 | 範囲 | 例 |
---|---|---|---|
%Y | 年 西暦 4 桁 | 1900- | 2021 |
%y | 西暦 2 桁 | 19- | 21 |
%m | 月 10 進表記 | 01-12 | 10 |
%B | 月名 | January, | Octobar |
%b | 月名 略称 | Jan, | Oct |
%d | 日 10 進表記 | 01-31 | 25 |
%A | 曜日 | Sunday, | Monday |
%a | 曜日 略称 | Sun, | Mon |
%H | 時間(24 時間) | 00-23 | 18 |
%I | 時間(12 時間) | 00-12 | 06 |
%p | 午前、午後 | AM, PM | AM |
%M | 分 10 進表記 | 00-59 | 05 |
%S | 秒 10 進表記 | 00-59 | 48 |
現在の日時を取得する
現在の日時等を取得するには datetime.now() を使う。これは現在日時の datetime 型を生成して返すメソッドである。
datetime.now()
現在の日付を取得してフォーマットする。
import datetime
now = datetime.datetime.now()
now.strftime("%Y/%m/%d %H:%M:%S")
# 2021/10/25 06:05:08
リテラルを使う方法。
f"{now:%Y/%m/%d - %H:%M:%S}"
# 2021/10/25 - 06:05:08
time --- 時刻データへのアクセスと変換 — Python 3.10.0b2 ドキュメント
date
date 型は、日付を扱うことができる。
date(year, month, day)
引数で指定する年月日の date 型を生成する。
from datetime import date
xmas = date(2021, 12, 24)
xmas
# datetime.date(2021, 12, 24)
xmas.day
# 24
xmas.month
# 12
xmas.year
# 2021
次のようにフォーマットすると、日付の部分が整形され、時刻は深夜 0 時 0 分になる。
from datetime import date
s = date(2023, 11, 1)
fmt = "%A, %B, %d, %Y, %I:%M:%S"
s.strftime(fmt)
# Wednesday, November, 01, 2023, 12:00:00
現在の日付を取得する場合、date.today() メソッドを使う。
from datetime import datetime, date
d = date.today()
s = d.strftime("%Y/%m/%d")
print(s)
# 2021/10/26
timedelta 型
timedelata 型は、日時の計算を行う。次に示すコードは、10 日後の日付を計算したものである。
from datetime import datetime, date, time, timedelta
d = date.today()
y = d + timedelta(days=10)
print(y)
# 2021-11-05