Pythonの「datetime」というライブラリについてご紹介します。
import datetime
「datetime」は、時間に関するデータを取り扱うためのライブラリです。Pythonの標準モジュールとしてPythonに同梱されています。
時間情報を扱う同様のライブラリとして「time」「calendar」などがあります。timeとdatetimeはよく似ているのですが、datetimeは
- よりシンプル
- 日付の部分と時間の部分を分けられる
- 時刻の差分(日付 - 日付)が手軽に取り扱える
などのポイントがtimeと異なる点かと思います。
以下、おもな機能を見てみます。
datetimeのデータ型
import datetime
print datetime.datetime.__name__ # datetime
print datetime.date.__name__ # date
print datetime.time.__name__ # time
datetimeには、datetime、date、timeという3つのタイプのデータ型があります。名前のとおり、datetimeは日付と時刻をまとめた時間、dateは日付のみ、timeは時刻のみを扱うオブジェクトです。
print datetime.timedelta.__name__ # timedelta
また、日付間、時刻間の差分を表す型として、timedeltaというものが用意されています。
datetime
datetimeは、年、月、日、時間、分、秒、マイクロ秒(100万分の1秒)という情報を持ったデータ型です。
t1 = datetime.datetime(2013,8, 5, 3 ,50 ,25)
t2 = datetime.datetime.today()
print t1 # 2013-08-05 03:50:25 と表示される
print t2 # t1と同じフォーマットで現在時刻が表示される
datetime(年, 月, 日, ...)という形式でインスタンスを作ることができます。メソッドtoday()を使うと、現在の日・時を得ることができます。
import time
t3 = datetime.datetime.fromtimestamp(time.time())
print t3 # t1と同じフォーマットで現在時刻が表示される
fromtimestamp()というメソッドを使えば、time.time()が返すような、1970年1月1日0時からの経過秒数で表された時刻フォーマット(POSIXタイム)をdatetime形式に変換することができます。
t4 = datetime.datetime.strptime('2013 08 05', '%Y %m %d')
print t4 # 2013-08-05 00:00:00 と表示される
文字列で表された時刻をdatetime型に変換するには、strptime()を使います。
年や月などの情報にアクセスするには、アトリビュートやメソッドを使います。
print t2.year # 年
print t2.month # 月
print t2.day # 日
print t2.hour # 時
print t2.minute # 分
print t2.second # 秒
print t2.microsecond # マイクロ秒
print t2.weekday() # 曜日を表す0から6の数字
「-」演算子を使うことで、2時刻間の差分も簡単に得ることができます。
d1 = t1 - t2
print type(d1).__name__ # timedelta
print d1 # 32 days, 15:25:33.... などと表示される
差分を取ることで、timedeltaインスタンスが自動的に生成されます。
datetime型の変数に「+」「-」演算子でtimedeltaを加えることで、元の日付にその差分を加えた日付を得ることも可能です。
d2 = datetime.timedelta(days=350)
t3 = t1 + d2
print type(t3).__name__ # datetime
print t3 # t1にd2を追加した時間が表示される
date
t5 = datetime.date(2013, 10, 12)
t6 = datetime.date.today()
print t5 # 2013-10-12
print t5 # t5と同じフォーマットで本日の日付
dateは、日付部分――年・月・日の情報のみを持ったデータ型です。ちょうど、datetimeが持つパラメータや機能のうち時刻の部分を取っ払って日付に関する部分だけを抽出したような内容となっています。
データとしては日付部分だけしか見なくてdatetimeは冗長だ、といった場合なんかには便利かと思います。
time
t7 = datetime.time(7, 5 ,37)
print t7
dateとは逆に、日付部分を取っ払い、1日のうちの時刻の部分――時・分・秒・マイクロ秒のみを持ったデータ型がtimeです。
timeはdatetime、timeと比べて機能がシンプルで、today()やnow()なども用意されていないようです。
以上です。
ほかにも、タイムゾーンを表現する「tzinfo」や「timezone」といったオブジェクト、フォーマットの変換機能なんかも用意されていておもしろいので、詳しくは公式ドキュメントをごらんになってください。
インストール 「datetime」は標準モジュールとしてPythonに同梱されているので、別途インストールの必要はありません。