Pythonで日時のデータを扱う:datetime
Pythonで日付や時刻を扱う場合は datetime モジュールを使用します。今回は datetime モジュールを使って日時の取得、生成、演算、比較、表示を行う方法などについて説明します。
目次
現在の日時を取得する:today
日付を扱う場合は datetime モジュールの date クラスを使用します。
dateクラスの today() を使用すれば現在の時刻を取得できます。
datetime.date.today()
以下のように日付の各要素を取得することができます。
# -*- coding: utf-8 -*- import datetime today = datetime.today # 現在の日付を取得 print(today.year) # 年: 2016 print(today.month) # 月: 2 print(today.day) # 日: 23
現在の日付と時刻を取得する
日付と時刻を扱う場合は datetime モジュールの datetime クラスを使用します。
datetime クラスの now() を使用すれば現在の日付を取得できます。
datetime.datetime.now()
以下のようにすると日時の各要素を取得することができます。
# -*- coding: utf-8 -*- import datetime now = datetime.datetime.now() # 現在の日時を取得 print(now.year) # 年: 2016 print(now.month) # 月: 2 print(now.day) # 日: 23 print(now.hour) # 時: 11 print(now.minute) # 分: 53 print(now.second) # 秒: 42 print(now.microsecond) # マイクロ秒: 728665
指定した日時のオブジェクトを生成する
指定した日時のオブジェクトを生成する場合は、 datetime() を用いてオブジェクトを生成します。
datetime.datetime(年, 月, 日[, 時[, 分[, 秒[, マイクロ秒[, タイムゾーン]]]]])
以下のプログラムは、2016年2月22日22時22分22秒という日時を生成する例です。
import datetime d = datetime.datetime(2016, 2, 22, 2, 22, 22) print(d) # 2016-02-22 02:22:22
指定した時刻のオブジェクトを生成する
指定した時刻のオブジェクトを生成する場合は、time() を用いてオブジェクトを生成します。
datetime.time([時, [分, [秒, [, マイクロ秒, タイムゾーン]]]]])
以下のプログラムは、12時34分56秒という日時を生成する例です。
import datetime t = datetime.time(12, 34, 56) print(t) # 12:34:56
日時の演算と比較:timedelta
日時を比較する場合は、datetime オブジェクト同士を差を求めることで比較することができます。datetime のオブジェクト同士を演算子した結果は timedelta クラスのオブジェクトして返されます。
# -*- coding: utf-8 -*- import datetime d1 = datetime.datetime(2016, 6, 27, 12, 11, 30) d2 = datetime.datetime(2015, 6, 27, 11, 10, 0) td = d1 - d2 print(td) # 差分: 366 days, 1:01:30 print(td.days) # 日: 366 print(td.seconds) # 秒: 3690 print(td.microseconds) # マイクロ秒: 0
timedelta オブジェクトは日、秒、マイクロ秒のデータが内部的に保存されており、days, seconds, microseconds メソッドを使用することにより情報を取得することができます。
日時の差分を生成する
timedelta を使用すれば、n 日後や n 秒前といった日時を生成することでもできます。temedelta のオブジェクトと加減算を行っても date や datetime オブジェクトの型はそのままの型のままです。
以下は現在日時から10日後を生成するサンプルコードです。
import datetime d1 = datetime.date(2016, 6, 27) td = datetime.timedelta(days=10) d2 = d1 + td print(d2) # 2016-07-07
timedelta は weeks, days, hours, minutes, seconds などをキーワード指定で引数に渡すことによって、指定した差分を生成することができます。これらの引数は複数指定することもできます。
日時を比較する
日時のオブジェクトを比較するときは、比較演算子を使用することができます。
import datetime d1 = datetime.date(2016, 6, 27) d2 = datetime.date(2016, 7, 27) print(d2 > d1) # True print(d1 == d2) # False
曜日を取得する
曜日を取得する場合は、weekday() メソッドを使用します。weekday() は月曜日から日曜日までの曜日を 0 から 6 の整数で返します。
import datetime d1 = datetime.date(2016, 6, 27) d2 = datetime.date(2016, 6, 28) print(d1.weekday()) # 0 print(d2.weekday()) # 1
上のプログラムでは整数が出力されますが、整数と対応する曜日から、2016年6月27日は月曜日、2016年6月28日は火曜日であることが確認できます。
日時の文字列フォーマット:strftime
strftime メソッドを使用して日時を整形して表示することができます。
strftime(フォーマット文字列)
strftime はフォーマット後の文字列を返します。
以下は文字列フォーマットを使用したサンプルコードです。
# -*- coding: utf-8 -*- import datetime d = datetime.date(2016, 6, 27) print(d.strftime("%y年%m月%d日")) # 16年06月27日
文字列フォーマットに使用できるオプションはこちらを参考にしてください。