Python標準ライブラリdatetimeで日付と時間を処理


このページは以下のURLに移転しました。5秒後に自動で移動します。
新URL: https://note.nkmk.me/python-datetime-usage/

標準ライブラリdatetimeを使って、簡単な日付と時間の処理ができる。

なお、込み入った処理をしたい場合は、dateutilというモジュールもある。

datetimeオブジェクト

datetimeオブジェクトは日付(年、月、日)と時刻(時、分、秒、マイクロ秒)の両方の情報を持つオブジェクト。

そのほか、日付の情報だけを持つdateオブジェクト、時刻の情報だけを持つtimeオブジェクトがある。

datetime.now()で現在の日付と時刻のdatetimeオブジェクトを得られる。属性として、year, month, day, hour, minute, second, microsecondを持つ。

1
2
3
4
5
6
7
8
9
10
11
from datetime import datetime
now = datetime.now()
print(type(now))
# <class 'datetime.datetime'>
print(now)
# 2015-12-13 14:54:38.707166
print(now.year)
# 2015 → 2015年
print(now.hour)
# 14 → 14時

コンストラクタはdatetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)。年、月、日は必須。

1
2
3
4
5
6
7
mydate = datetime(2015, 11, 1)
print(mydate)
# 2015-11-01 00:00:00
print(mydate.month)
# 11 → 11月
print(mydate.day)
# 1 → 1日

timedeltaオブジェクト

timedeltaオブジェクトは時間差を表すオブジェクト。

1
2
3
4
5
6
7
delta = now - mydate
print(type(delta))
# <class 'datetime.timedelta'>
print(delta)
# 42 days, 14:54:38.707166
print(delta.days)
# 42

コンストラクタはtimedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

例えば、10日と1週間後の日付は次のとおり。

1
2
3
4
5
from datetime import timedelta
ten_days_one_week_later = now + timedelta(10, weeks=1)
print(ten_days_one_week_later)
# 2015-12-30 14:54:38.707166

文字列との相互変換

文字列への変換 strftimeメソッド

datedatetime、および、timeオブジェクトは、strftimeメソッドで任意の書式の文字列に変換できる。

  • 年月日:%y%m%d
  • 曜日:%A%a(短縮形)
  • 月名:%B%b(短縮形)
  • ロケールに応じた適切な形式の日付と時刻:%c

など、いろいろある。

書式文字列の詳細は公式 ドキュメント参照。

1
2
3
4
5
6
print(now.strftime('%y/%m/%d (%a)'))
# 15/12/13 (Sun)
print(now.strftime('%c'))
# Sun Dec 13 14:16:19 2015
print(now.strftime('%j'))
# 347 → 347日目(1年で何日目か)

文字列からの変換 strptimeメソッド

datetimeオブジェクトのstrptimeメソッドは、日付や時刻に対応する書式文字列からdatetimeオブジェクトを生成する。

1
2
3
4
date_str = '2015/10/2'
date_datetime = datetime.strptime(date_str, '%Y/%m/%d')
print(date_datetime)
# 2015-10-02 00:00:00

関連記事