datetimeモジュールとdatetime型

標準ライブラリのdatetimeモジュールには日付と時間を扱う型がいくつか用意されています。このページではdatetimeモジュールとその中のdatetime型について解説します。

datetimeモジュール

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

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

datetime型

それではdatetimeモジュールのdatetime型から説明します。モジュール名と型の名前が一緒ですが混同しないように注意してください。(import文で混乱されている方はこちらで復習してください。)

datetime型変数の生成

datetime型の変数を生成する際は、引数に年、月、日、自、分、秒、マイクロ秒を順に指定します。以下のサンプルは、2018-01-02 03:04:05を表す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

現在日時の取得

datetimeのnowメソッドを使用すると、現在時刻のdatetime型変数を得ることができます。

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メソッドを使用すると、文字列からdatetime型に変換することができます。第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から文字列への変換

strftimeメソッドを使用すると、さきほどとは逆にdatetimeから文字列に変換することも可能です。引数に文字列フォーマットを指定します。

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つの日時の間隔を引き算で求めています。

 
次回は日付と時間を表すdate型、time型について解説します。