日付と時間 その1 datetime

pythonの日付と時間については標準ライブラリのdatetimeモジュールが提供されています。datetimeモジュールは簡潔かつわかりやすい構成となっています。

datetimeモジュール

datetimeモジュールには日付、時間データを様々な方法で操作する方法が提供されていますが、まずは代表的な4種類のオブジェクトを紹介します。

オブジェクト 説明
dateオブジェクト 日付 (年、月、および日) を表します。
timeオブジェクト ローカル時刻を表します。
datetimeオブジェクト dateオブジェクトおよび timeオブジェクトの全ての情報が入っている単一のオブジェクトです。
timedeltaオブジェクト 経過時間、つまり2つの日付や時刻間の差を表します。

datetimeオブジェクト

それではdatetimeモジュールのdatetimeオブジェクトから説明します。モジュール名と型の名前が一緒ですが、混乱しないでください。(import文で混乱されている方はこちらで復習してください。)

datetimeオブジェクトの生成

オブジェクトを生成する際は、コンストラクタで順に、年、月、日、自、分、秒、マイクロ秒を指定します。

from datetime import datetime

# datetimeオブジェクトの生成
dt_obj = datetime(2018, 1, 2, 3, 4, 5, 000000)
print(dt_obj) # 2018-01-02 03:04:05

現在日時の取得

nowメソッドを使用します。

from datetime import datetime

# 現在日時の取得
dt_obj_now = datetime.now()
print(dt_obj_now) # 現在時刻が表示され

日付、時刻要素の取得

datetimeオブジェクトから年、月、日、自、分、秒などの要素を取得するには下記の通りそれぞれに対応した属性を使用します。

from datetime import datetime, timedelta

dt_obj = datetime(2018, 1, 2, 3, 4, 5, 000000)
print(dt_obj) # 2018-01-02 03:04:05 
print(dt_obj.year) # 2018
print(dt_obj.month) # 1
print(dt_obj.day) # 2 
print(dt_obj.hour) # 3 
print(dt_obj.minute) # 4 
print(dt_obj.second) # 5 
print(dt_obj.microsecond) # 0

文字列からdatetimeへ変換

strptimeメソッドを使用します。第1引数に日付時刻の文字列を、第2引数にフォーマット文字列を指定します。

from datetime import datetime

# 文字列からdatetimeへ(strptimeメソッドの利用)
dt_str = '2017-04-01 12:32:05'
dt_obj = datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S')
print(type(dt_obj)) # <class 'datetime.datetime'>

上のサンプルの年月日の区切りはハイフンですが、例えばスラッシュを使用したい場合はフォーマット文字列に’%Y/%m/%d %H:%M:%S’を指定します。

datetimeから文字列への変換

では今度は逆にdatetimeから文字列に変換してみましょう。strftimeメソッドを使用します。引数に文字列フォーマットを指定します。

from datetime import datetime

# 文字列からdatetimeに変換
dt_str = '2017-04-01 12:32:05'
dt_obj = datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S')

# datetimeから文字列に変換(strftimeメソッドの利用)
dt_str2 = dt_obj.strftime('%Y/%m/%d %H:%M:%S')
print(dt_str2) # 2017/04/01 12:32:05

datetimeの加減算

日時の計算にはtimedeltaオブジェクトを使用します。引数に週(weeks)、日(days)、時(hours)、分(minutes)、秒(seconds)、ミリ秒(milliseconds)、マイクロ秒(microseconds)を指定できます。必要なものだけキーワード引数を使用しましょう。

from datetime import datetime, timedelta

dt_obj = datetime(2018, 1, 2, 3, 4, 5, 000000)
print(dt_obj) # 2018-01-02 03:04:05 

delta = timedelta(days=1) # 1日分の間隔

dt_obj2 = dt_obj + delta # 1日分足す
print(dt_obj2) # 2018-01-03 03:04:05 

dt_obj3 = dt_obj - delta # 1日分引く
print(dt_obj3) # 2018-01-01 03:04:05 

また、datetimeオブジェクト同士を演算することも可能です。引き算するとその間隔のtimedeltaオブジェクトを取得することができます。

from datetime import datetime, timedelta

# 2018-01-02 03:04:05 
dt_obj1 = datetime(2018, 1, 2, 3, 4, 5, 000000)

# 2018-02-03 04:05:06
dt_obj2 = datetime(2018, 2, 3, 4, 5, 6, 000000)

# 日時の間隔を求める
delta = dt_obj2 - dt_obj1
print(delta) # 32 days, 1:01:01

このサンプルでは2つの日時の間隔を引き算で求めています。


長くなったため2回に分けます。date型、time型はその2に続きます。