Pythonで日付と時刻を扱う


基本的な使い方は以下の通り。

>>> from datetime import datetime, date, time
>>> dt = datetime(2011, 10, 29, 20, 30, 21)
>>> dt.day
29
>>> dt.minute
30


現在時刻はdatetime.now()で取得できる。

>>> now = datetime.now()
>>> now
datetime.datetime(2018, 11, 9, 7, 17, 26, 859338)

datetimeオブジェクトを文字列としてフォーマットする

strftimeメソッドを用いることで、datetimeオブジェクトを文字列としてフォーマットできる。

>>> dt.strftime('%m/%d/%Y %H:%M')
'10/29/2011 20:30'
タイプ 定義
%Y 年(4桁表記)
%y 年(2桁表記)
%m 月(2桁表記)[01,12]
%d 日(2桁表記)[01,31]
%H 時(24時間表記)[00,23]
%I 時(12時間表記)[01,12]
%M 分(2桁表記)
%S 秒(2桁表記)
%w 曜日の数値表記[0,6]日曜始まりで日曜が0、土曜が6
%U 週番号(1年のうち何週目か)日曜を週初とする。最初の日曜より前の週を第0週とする
%W 週番号。月曜を週初とする。最初の月曜より前の週を第0週とする
%z UTCからのタイムゾーンのオフセット
%F %Y-%m-%dのショートカット。2012-4-18
%D %m/%d/%yのショートカット。04/18/12

文字列をdatetimeオブジェクトに変換する

strptimeメソッドを使うことで、文字列をdatetimeオブジェクトに変換することができる。

>>> datetime.strptime('20181109', '%Y%m%d')
datetime.datetime(2018, 11, 9, 0, 0)

分と秒を0に置き換える

datetimeの時刻フィールドを一括して揃える方法は以下の通り。

>>> dt.replace(minute=0, second=0)
datetime.datetime(2011, 10, 29, 20, 0)

時刻の差を取る

2つのdatetimeオブジェクトの差を取ると、datetime.timedelta型のオブジェクトが返される。

>>> dt = datetime(2018, 11, 1, 22, 0)
>>> dt2 = datetime(2018, 11, 9, 7, 30)
>>> delta = dt2 - dt
>>> delta
datetime.timedelta(7, 34200)

timedelta(7, 34200)は7日と34200秒の差であることを示す。

datetimeオブジェクトにtimedeltaオブジェクトを加えると、その分だけ変化した時刻を得ることができる。

>>> dt
datetime.datetime(2018, 11, 1, 22, 0)
>>> dt + delta
datetime.datetime(2018, 11, 9, 7, 30)