Python

[Python] datetimeモジュールで日付型・時刻型を扱う

2018年7月8日

こんにちは!土門大貴(daikidomon)です。

Pythonで日付型・時間型を扱うための「datetime」モジュールを紹介します。

「datetime」モジュールを使用すれば、時刻情報の取得だけでなく、時刻データの計算も簡単にできるようになります。

datetimeモジュールとは?

datetime」モジュールとは、Python内の標準ライブラリで日付や時刻のデータを簡単に扱うことができます。

また「datetime」モジュールでは四則演算もサポートしています。

datetimeモジュールでは以下のオブジェクトができ、これらを覚えておけば問題ないでしょうか。

オブジェクト名説明
datetime.datetime日付と時刻を扱う
datetime.date日付を扱う
datetime.time時刻を扱う
datetime.timedelta日付・時刻の計算に使用

日付・時刻型を扱う:datetimeオブジェクト

現在の日付型と時刻型を同時に扱うには「datetime」オブジェクトを使用することをオススメします。

紛らわしいですが、「datetime」モジュールの「datetime」オブジェクトなので注意してください。

また現在日付・時刻を取得するのは

  • now()」メソッド
  • today()」メソッド

を使用します。下の要に使用します。
import datetime

dt_now = datetime.datetime.now()
dt_today = datetime.datetime.today()
下がサンプルになります。
import datetime

if __name__ == '__main__':
dt = datetime.datetime.now()

# datetimeオブジェクト
print(dt)
# 年
print(dt.year)
# 月
print(dt.month)
# 日
print(dt.day)
# 時
print(dt.hour)
# 分
print(dt.minute)
# 秒
print(dt.second)
# マイクロ秒
print(dt.microsecond)

出力結果は以下になります。

2018-07-07 11:33:57.430497
2018
7
7
11
33
57
430497

「datetime」オブジェクトの各属性で年月日と現在時刻も表示することができます。

日付型を扱う:dateオブジェクト

日付型を扱うには「date」オブジェクトを使用することをオススメします。

現在日付を取得するのは「today()」メソッドを使用します。
import datetime

date_now = datetime.date.today()
下がサンプルになります。
import datetime

if __name__ == '__main__':
date_now = datetime.date.today()
print(date_now)
# 年
print(date_now.year)
# 月
print(date_now.month)
# 日
print(date_now.day)

出力結果は以下になります。

2018-07-07
2018
7
7

ちなみに「datetime」オブジェクトもインスタンスメソッドを使用することで、

「date」オブジェクトに変換することができます。
import datetime

if __name__ == '__main__':
dt = datetime.datetime.now()
# date()インスタンスメソッド
print(dt.date())

時刻を扱う:timeオブジェクト

時刻を扱うには「time」オブジェクトを使用出来ます。

現在の時刻は「time」オブジェクトでは取得できませんので注意してください。

下がサンプルになります。
import datetime

if __name__ == '__main__':
time_now = datetime.time(hour=22, minute=30, second=15, microsecond=555)
print(time_now)
# 時
print(time_now.hour)
# 日
print(time_now.minute)
# 分
print(time_now.second)
# マイクロ秒
print(time_now.microsecond)
出力結果は以下になります。

22:30:15.000555
22
30
15
555

ちなみに「datetime」オブジェクトもインスタンスメソッドを使用することで、

「time」オブジェクトに変換することができます。
import datetime

if __name__ == '__main__':
dt_today = datetime.datetime.today()

# time()インスタンスメソッド
print(dt.time())

時刻・日付で計算:timedeltaオブジェクト

日付・時刻を計算するに「timedelta」オブジェクトを使用出来ます。

「timedalta」を使用することで、

  • ○○日後
  • ○○年前
  • ○○時間経過

といったような計算を行うことができます。

「timedelta」は以下のように使用します。
import datetime
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
以下指定方法です。すべて整数で指定します。

timedeltaのコンストラクタ説明
days=日にちを進める。負の整数で日にちを戻す
seconds=秒数を進める。負の整数で秒数を戻す
microseconds=マイクロ秒数を進める。負の整数でマイクロ秒数を戻す
milliseconds=ミリ秒数を進める。負の整数でミリ秒数を戻す
minutes=分を進める。負の整数で分を戻す
hours=時間を進める。負の整数で時間を戻す
weeks=週数を進める。負の整数で週数を戻す

下がサンプルになります。
import datetime

if __name__ == '__main__':
# 7日前と7日後を計算
dt_now = datetime.datetime.now()
before_7days = dt_now + datetime.timedelta(days=-7)
after_7days = dt_now + datetime.timedelta(days=7)
print(dt_now)
print(after_7days)
print(before_7days)

# 2000年からどれだけの何日経過したか計算
dt_2000year = datetime.date(year=2000, month=12, day=31)
print(dt_2000year)
duration = dt_now.date() - dt_2000year
print(duration.days)
出力結果は以下になります。

2018-07-07 13:01:52.313777
2018-07-14 13:01:52.313777
2018-06-30 13:01:52.313777
2000-12-31
6397

 

関連記事

-Python

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.