datetimeモジュール

・datetime  モジュールの主な型
・date      年月日の日付を扱う(日付型)
・time      時分秒、マイクロ秒の時刻を扱う(時刻型)
・datetime   日付、時刻の両方を扱う(日付時刻型)
・timedelta  日付、時刻の間隔を扱う


各メソッド説明
①date

作成方法と主なクラスメソッド     説明
date(year, month, day)        引数で指定される日付を作成します(存在しない場合ValueError)。
date.today()             現在の日付を返します。
 

以下は、dateオブジェクトの主なメソッドと属性です。

主なメソッドと属性     説明
weekday()    曜日を表す整数(月曜日: 0, ..., 日曜日: 6)
year    年
month    月
day    日


dateオブジェクト同士の比較
dateオブジェクトは、数字のように比較ができます。<, <=, >, >=, ==, !=が使えます。
たとえば、date(2000, 1, 1) < date(2000, 1, 2)はTrueです。

文字列への変換
文字列への変換は、f-stringsで書式を指定してできます。
たとえば、f'{dt:%Y/%m/%d}'は、'2019/06/07'のようになります。ちなみに、str(dt)は'2019-06-07'です。

%Y:年(4桁)
%y:年(0埋めして下2桁)
%m:月(0埋めして2桁)
%d:日(0埋めして2桁)


time型
time型は時刻を扱います。日付の情報は持ちません。以下は、time型の作成方法です。
from datetime import timeとして使います。

作成方法    説明
time(hour, minute, second)    引数で指定される時刻を作成します(存在しない場合ValueError)。

hour    時(0から23)
minute    分(0から59)
second    秒(0から59)

timeオブジェクト同士の比較
timeオブジェクトは、数字のように比較ができます。<, <=, >, >=, ==, !=が使えます。
たとえば、time(23, 59, 59) > time(0, 0, 0)はTrueです。

文字列への変換
文字列への変換は、f-stringsで書式を指定してできます。
たとえば、f'{tm:%H:%M:%S}'は、'23:45:59'のようになります。ただし、str(tm)も同じく'23:45:59'です。

%H:24時間表記の時(00から23)
%I:12時間表記の時(01から12)
%M:分(0埋めして2桁)
%S:秒(0埋めして2桁)



datetime型
datetime型は日付時刻を扱います。以下は、datetime型の作成方法と主なクラスメソッドです。
from datetime import datetimeとして使います。

作成方法と主なクラスメソッド    説明
・datetime(year, month, day, hour, minute, second)    

 引数で指定される日付時刻を作成します(存在しない場合ValueError)。


・datetime.now()              

 現在の日付時刻を取得します。引数でタイムゾーンを指定できますが、説明は省略します。


・datetime.combine( date, time)    

 日付と時刻から日付時刻を作成します。
 

・datetime.strptime( date_string, format)    

 formatを基準に、date_stringから日付時刻を作成します。

以下は、datetimeオブジェクトの主なメソッドと属性です。

主なメソッドと属性     説明
date()           日付型に変換
time()           時刻型に変換
replace(属性=新しい値)    属性を変更した新しいdatetiem型のオブジェクトを作成
weekday()    曜日を表す整数(月曜日: 0, ..., 日曜日: 6)
year    年
month    月
day    日
hour    時(0から23)
minute    分(0から59)
second    秒(0から59)
※ たとえば、dt.replace(second=0)とすると、秒を0に変更したオブジェクトを作成します。

文字列への変換
文字列への変換は、f-stringsで書式を指定してできます。
たとえば、f'{dt:%Y-%m-%d %H:%M:%S}'は、'2019-06-07 23:45:59'のようになります。ただし、str(dt)も同じく'2019-06-07 23:45:59'です。


timedelta型
timedelta型は差としての時間を扱います。以下は、timedelta型の作成方法です。
from datetime import timedeltaとして使います。

作成方法    説明
・timedelta(days=0, seconds=0, microseconds=0)    

 daysは日単位、secondsは秒単位、microsecondsはマイクロ秒(百万分の1秒)単位です。

 全てを加算したtimedeltaを作成します(省略時は0です)。
※ 引数は、何れも浮動小数点数が使えます。範囲はマイナスを含めて自由です。たとえば、timedelta(seconds=-2*24*60*60)は-2日です。

以下は、timedeltaオブジェクトの主なメソッドと属性です。

主なメソッドと属性        説明
total_seconds()         秒に変換
days              日の部分の整数値(全体として負の場合、daysは負です)
seconds             秒の部分の整数値(0から86399)
microseconds          マイクロ秒の部分の整数値(0から999999)
※ days, seconds, microsecondsは、部分であることに注意してください。すなわち、days * 86400 + seconds + microseconds * 1e-6が、total_seconds()になります。


date型、datetime型との演算
timedelta型は、date型、datetime型と演算するためにあります。
また、timedelta型同士の四則演算や、timedelta型と数字の掛け算・割り算もできます。

date型同士の差を計算すると、timedelta型になります。
datetime型同士の差を計算すると、timedelta型になります。
date型にtimedelta型を足したり引いたりすると、date型です。
datetime型にtimedelta型を足したり引いたりすると、datetime型です。
「timedelta型 * 数字」は、timedelta型です。
「timedelta型 + timedelta型」や「timedelta型 - timedelta型」は、timedelta型です。
「timedelta型 / timedelta型」は浮動小数点数、「timedelta型 // timedelta型」は整数です。



演習 演算
from datetime import date, datetime, timedelta
da = date(2019,6,7)
dt = datetime(2019,6,7)
td = timedelta(days = 1)

print(td.total_seconds())
print(da + td)
print(dt + td)
print(da + td * 2)
print(dt + td * 2)
print(date(2019,6,9) - da)

86400.0
2019-06-08
2019-06-08 00:00:00
2019-06-09
2019-06-09 00:00:00
2 days, 0:00:00



最終テスト
n日後と表記する

from datetime import date, timedelta
dt = date(2019,1,1)
for n in [100, 500, 1000, 5000]:
    dtn = dt + timedelta(n)
    print(f"{n}日後 {dtn}")

結果
100日後 2019-04-11
500日後 2020-05-15
1000日後 2021-09-27
5000日後 2032-09-09


※dtn = dt + timedelta(n)は timedelta()でn日後と自動でなる