Pythonで日付や時刻を扱う場合は datetime モジュールを使用します。今回は datetime モジュールを使って日時の取得、生成、演算、比較、表示を行う方法などについて説明します。
現在の日時を取得する:today
日付を扱う場合は datetime モジュールの date クラスを使用します。
dateクラスの today() を使用すれば現在の時刻を取得できます。
1 |
datetime.date.today() |
以下のように日付の各要素を取得することができます。
1 2 3 4 5 6 7 8 9 |
# -*- coding: utf-8 -*- import datetime today = datetime.today # 現在の日付を取得 print(today.year) # 年: 2016 print(today.month) # 月: 2 print(today.day) # 日: 23 |
現在の日付と時刻を取得する
日付と時刻を扱う場合は datetime モジュールの datetime クラスを使用します。
datetime クラスの now() を使用すれば現在の日付を取得できます。
1 |
datetime.datetime.now() |
以下のようにすると日時の各要素を取得することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# -*- 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() を用いてオブジェクトを生成します。
1 |
datetime.datetime(年, 月, 日[, 時[, 分[, 秒[, マイクロ秒[, タイムゾーン]]]]]) |
以下のプログラムは、2016年2月22日22時22分22秒という日時を生成する例です。
1 2 3 4 |
import datetime d = datetime.datetime(2016, 2, 22, 2, 22, 22) print(d) # 2016-02-22 02:22:22 |
指定した時刻のオブジェクトを生成する
指定した時刻のオブジェクトを生成する場合は、time() を用いてオブジェクトを生成します。
1 |
datetime.time([時, [分, [秒, [, マイクロ秒, タイムゾーン]]]]]) |
以下のプログラムは、12時34分56秒という日時を生成する例です。
1 2 3 4 |
import datetime t = datetime.time(12, 34, 56) print(t) # 12:34:56 |
日時の演算と比較:timedelta
日時を比較する場合は、datetime オブジェクト同士を差を求めることで比較することができます。datetime のオブジェクト同士を演算子した結果は timedelta クラスのオブジェクトして返されます。
1 2 3 4 5 6 7 8 9 10 11 12 |
# -*- 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日後を生成するサンプルコードです。
1 2 3 4 5 6 7 |
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 などをキーワード指定で引数に渡すことによって、指定した差分を生成することができます。これらの引数は複数指定することもできます。
日時を比較する
日時のオブジェクトを比較するときは、比較演算子を使用することができます。
1 2 3 4 5 6 7 |
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 の整数で返します。
1 2 3 4 5 6 7 |
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 メソッドを使用して日時を整形して表示することができます。
1 |
strftime(フォーマット文字列) |
strftime はフォーマット後の文字列を返します。
以下は文字列フォーマットを使用したサンプルコードです。
1 2 3 4 5 6 |
# -*- coding: utf-8 -*- import datetime d = datetime.date(2016, 6, 27) print(d.strftime("%y年%m月%d日")) # 16年06月27日 |
文字列フォーマットに使用できるオプションはこちらを参考にしてください。