Python : 日付の基本操作編(datetime 型、date 型、strptime など)

TwitterFacebookHatena
  • 公開:2021-10-26
  • 更新:2023-10-26
  • 文章量:3206
  • Python

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

Python : 日付の基本操作編(datetime 型、date 型、strptime など)