datatimeモジュール - Python
入門 Python 3 に記載されていた日付と時刻の扱いについてまとめてみた。忘れてもいいようにメモとして残しておく。
Pythonで日時や時刻を扱うときの一つの方法として、標準モジュールのdatetime
モジュールがある。このモジュールには主なオブジェクト(クラス?)が4つある。
date
...年月日を扱うtime
...時分秒を扱うdatetime
...日付と時刻を扱うtimedelta
...日付と時刻の間隔を扱う
まずはdateオブジェクトから。
date
dateオブジェクトは年月日を指定することで生成できる。年月日はぞれぞれ属性として取り出せる。
>>> from datetime import date >>> birthday = date(1998, 3, 24) >>> birthday datetime.date(1998, 3, 24) >>> birthday.year 1998 >>> birthday.month 3 >>> birthday.day 24 >>> birthday.isoformat() '1998-03-24'
birthday.isoformat()
で日付の文字列を取得できる。ISOとは日時表現の国際標準でISO 8601のこと。
また、dateオブジェクトの範囲は以下のようになっているため紀元前の日付や天文学的な時間の計算(?)ではdateオブジェクトは使えない。
>>> date.min datetime.date(1, 1, 1) >>> date.max datetime.date(9999, 12, 31)
次は、日付と時刻の間隔を扱えるtimedeltaオブジェクト。
timedelta
次のソースではtoday()
メソッドを使って今日の日付を取得している。
>>> from datetime import date >>> now = date.today() >>> now datetime.date(2017, 10, 9)
次に、timedelta
オブジェクトを使い、今日の1日後、7日後、1日前の日付を取得する。
>>> from datetime import timedelta >>> one_day = timedelta(days=1) >>> tomorrow = now + one_day >>> tomorrow datetime.date(2017, 10, 10) >>> now + (7 * one_day) datetime.date(2017, 10, 16) >>> yesterday = now - one_day >>> yesterday datetime.date(2017, 10, 8)
timedeltaオブジェクトを使い、演算ができるのは直感的でいいと思った。
次は、時刻を扱うためのtime
オブジェクト。
time
>>> from datetime import time >>> noon = time(12, 0) >>> noon datetime.time(12, 0) >>> noon.hour 12 >>> noon.minute 0 >>> noon.second 0 >>> noon.microsecond 0
timeオブジェクトを生成するときには大きな単位から順に指定する(時, 分, 秒, マイクロ秒)。すべての引数の値は0がデフォルトとなっているため、省略された場合には0になる。
また、時、分、秒、マイクロ秒のそれぞれはプロパティで定義されているため、簡単に取得できる。※ マイクロ秒の値はコンピュータの内と全く同じ値にはなっていないことに注意すること。
次は、日時と時刻を扱うためのdatetime
オブジェクト。
datetime
次のようにしてdatetimeオブジェクトを作成できる。この例では2017年1月2日3時4分5秒6μ秒のdatetimeオブジェクトを作っている。
>>> from datetime import datetime >>> some_day = datetime(2017, 1, 2, 3, 4, 5, 6) >>> some_day datetime.datetime(2017, 1, 2, 3, 4, 5, 6) >>> some_day.isoformat() '2017-01-02T03:04:05.000006'
datetime.isoformat()
メソッドでISOの書式の文字列が取得できる。T
が日付と時刻の境目となっている。
現在の日時と時刻を取得するためにはnow()
メソッドを使う。
>>> from datetime import datetime >>> now = datetime.now() >>> now datetime.datetime(2017, 10, 9, 23, 17, 23, 376254)
また、年、月、日、時、分、秒、マイクロ秒はプロパティとして定義されているため簡単に取得できる。
>>> now.year 2017 >>> now.month 10 >>> now.day 9 >>> now.hour 23 >>> now.minute 17 >>> now.second 23 >>> now.microsecond 376254
datetime.combine()
メソッドを使うことでdateオブジェクトとtimeオブジェクトを結合してdatetimeオブジェクトを生成できる。
>>> from datetime import datetime , time, date >>> t = time(23, 30) >>> this_day = date.today() >>> dt = datetime.combine(this_day, noon) >>> dt datetime.datetime(2017, 10, 9, 23, 30) >>> dt.isoformat() '2017-10-09T23:30:00'
この例ではマイクロ秒を指定していないため、datetime.isoformat()
メソッドで取得できる値もマイクロ秒は含まれていない。
逆に、date()
、time()
メソッドを使えばdatetimeからdate、timeをちゅうしゅつできる。
>>> dt.date() datetime.date(2017, 10, 9) >>> dt.time() datetime.time(23, 30)
週番号を取得 (2017/10/13 追記)
datetimeオブジェクトで週番号を取得するにはdatetime.weekday()
メソッドを使う。(datetime.weekday)
>>> from datetime import datetime >>> dt = datetime.now() >>> dt datetime.datetime(2017, 10, 13, 8, 0, 25, 26142) >>> dt.weekday() 4
weekday()
で取得できる週番号は「0が月曜日」、「6が日曜日」となっている。4ということは金曜日ということになる。
参考文献
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る