Pythonのdatetimeモジュールを使って日付と時刻を操作する

Pythonのdatetimeモジュール

Pythonのdatetimeモジュールを使って、日付と時刻を操作する方法をメモしておきます。

Pythonには、datetimeモジュールの他にも”time”モジュールという日時を扱うモジュールがありますが、日時の操作には通常”datetime”モジュールを使います。

モジュールのインポート

“datetime”モジュールをインポートするためのおまじないです。

import datetime

datetime.dateクラス

“datetime.date”クラスに用意されている”today()”メソッドを使うと、その日の日付が取得できます。”datetime.date”型のオブジェクトです。

d1 = datetime.date.today()
print d1, type(d1)

実行結果:

2015-07-29 <type 'datetime.date'>

引数に年月日を渡すことで、日付を指定することができます。

d2 = datetime.date(2015, 8, 31)
print d2, type(d2)

実行結果:

2015-08-31 <type 'datetime.date'>

datetime.dateオブジェクトの演算

“datetime.date”型のオブジェクト間の演算です。演算結果は、”datetime.timedelta”型のオブジェクトになります。

d3 = d2 - d1
print d3, type(d3)

実行結果:

33 days, 0:00:00 <type 'datetime.timedelta'>

“datetime.timedelta”型のオブジェクトを整形する方法が見当たらなかったので、強引に処理してみました(スマートな方法があれば教えてください)。実際にはもう少しきちんと処理する必要があると思います。

d4 = str(d3)
print '夏休みは残り' + d4.split()[0] + '日です。'

実行結果:

夏休みは残り33日です。

datetime.dateオブジェクトの比較

“datetime.date”型のオブジェクト間の比較です。比較演算子を使って値の比較ができます。

if d1 < d2:
	print '夏休みは終わってません。'
elif d1 == d2:
	print '夏休み最終日です。'
else:
	print '夏休みは終わりました。'

出力結果:

夏休みは終わってません。

datetime.dateオブジェクトの整形

“datetime.date”オブジェクトを整形するには、”strftime()”メソッドを使います。引数にフォーマット文字列を渡すと、文字列として出力されます。

d1f = d1.strftime("%Y年%m月%d日")
print d1f, type(d1f)

出力結果:

2015年07月29日 <type 'str'>
d2f = d2.strftime("%Y%m%d")
print d2f, type(d2f)

出力結果:

20150831 <type 'str'>

曜日の取得

曜日を取得するには、”weekday()”メソッド、または”isoweekday()”メソッドを使います。”weekday()”メソッドでは、0〜6の整数が返ってきます。それぞれの整数が月曜日から日曜日に対応します。一方、”isoweekday()”メソッドでは、これが1〜7の整数になっています。(同じようなメソッドがふたつあるのは、何故でしょうか?)

print d1.weekday()

実行結果:

2

print d1.isoweekday()

実行結果:

3

返り値を使って配列にアクセスすると便利ですね。

w = ['月曜日','火曜日','水曜日','木曜日','金曜日','土曜日','日曜日']
print '本日は' + w[d1.weekday()] + 'です。'

実行結果:

本日は水曜日です。

datetime.datetimeクラス

“datetime.datetime”クラスは、日付だけでなく時刻も扱います。”now()”メソッドで現在時刻を取得できます。あとの使い方は”datetime.date”クラスとだいたい同じです。

t1 = datetime.datetime.now()
print t1, type(t1)

出力結果:

2015-07-29 13:14:51.093103 <type 'datetime.datetime'>

t2 = datetime.datetime(2015, 8, 31, 23, 59, 00)
print t2, type(t2)

出力結果:

2015-08-31 23:59:00 <type 'datetime.datetime'>

t3 = t2 - t1
print t3, type(t3)

出力結果:

33 days, 10:44:08.906897 <type 'datetime.timedelta'>

t4 = str(t3)
print '夏休みは残り' + t4.split()[0] + '日と' + t4.split()[2].split(':')[0] + '時間と' + t4.split()[2].split(':')[1] + '分と' +  t4.split()[2].split(':')[2].split('.')[0] + '秒です。'

出力結果:

夏休みは残り33日と10時間と44分と08秒です。

シェアしてもらえるとうれしいです。゚(´っωc`)゚。