Pythonによる日付・時刻の計算
Pythonによる日付や時刻の計算方法を整理しました。
現在時刻の取得
まずはdatetimeライブラリをインポートします。
現在日時の取得は簡単で、nowメソッドを呼び出します。
1 2 3 |
import datetime now = datetime.datetime.now() print(now) |
1 |
2019-11-28 21:49:46.293027 |
これで、現在の年から秒までが一気に取得できます。
日時の定義
続いては、任意の日付・時刻を定義する方法です。
例えば、2019年10月20日の12時34分56秒を指定したい場合は以下のように書きます。
1 2 |
test_time = datetime.datetime(2019, 10, 20, 12, 34, 56) print(test_time) |
1 |
2019-10-20 12:34:56 |
フォーマットの変換
既にフォーマットが決まってしまっている場合があります。
あまり変なフォーマットでなければ、上記のように形式変換しなくても、自動で日時を判別してくれる場合があります。
1 2 3 |
print(dateutil.parser.parse("2019/10/20")) print(dateutil.parser.parse("Oct 20 2019 12:34PM")) print(dateutil.parser.parse("2019-10-20 12:34:56")) |
1 2 3 |
2019-10-20 00:00:00 2019-10-20 12:34:56 2019-10-20 12:34:00 |
この機能を用いるにはdateutilのparserメソッドを読み込む必要があります。
便利な機能ではありますが、きちんと想定通りに変換されているかはきちんと確認するようにしましょう。
部分抽出
日時の一部分を抽出する方法です。
年、月、日、時、分、秒
以下のように、「year」「month」・・・とそもままの英単語で呼び出してあげるだけでOKです。
1 2 3 4 5 6 7 |
test_time = dateutil.parser.parse("2019-10-20 12:34:56") print(test_time.year) print(test_time.month) print(test_time.day) print(test_time.hour) print(test_time.minute) print(test_time.second) |
1 2 3 4 5 6 |
2019 10 20 12 34 56 |
曜日
曜日を抽出するにはweekdayメソッドを使います。
ただし、月曜が「0」、火曜が「1」・・・というようになっているので、曜日名は自分で定義する必要があります。
1 2 3 |
test_time = dateutil.parser.parse("2019-10-20") weeks={0 : "月曜日", 1 :"火曜日", 2 : "水曜日", 3 : "木曜日", 4 : "金曜日", 5 : "土曜日", 6 : "日曜日"} print(weeks[test_time.weekday()]) |
1 |
日曜日 |
weekdayメソッドを呼び出してから、辞書で定義した曜日名を返すことにより実現しています。
日付のみ
日付部分のみが欲しいときはdateメソッドを呼び出します。
1 2 |
test_time = dateutil.parser.parse("2019-10-20 12:34:56") print(test_time.date()) |
1 |
2019-10-20 |
時刻のみ
日付部分のみが欲しいときはtimeメソッドを呼び出します。
1 2 |
test_time = dateutil.parser.parse("2019-10-20 12:34:56") print(test_time.time()) |
1 |
12:34:56 |
差分の計算
ある2つの日時の差がどれだけか計算したい場合があります。
これは、datetimeメソッド同士の引き算をするだけでOKです。
1 2 3 |
test_time1 = dateutil.parser.parse("2019-10-20 12:34:56") test_time2 = dateutil.parser.parse("2019-9-30 18:00:00") print(test_time1 - test_time2) |
1 |
19 days, 18:34:56 |
これで簡単に差分が計算できます。
日付同士の足し算はできませんのでご注意ください。
一定期間前/後の日時の取得
ある日時から〜年前、〜分後・・・と言った日時を計算する方法です。
これにはdateutilのrelativedeltaメソッドを用いるのが簡単です。
1 2 3 4 5 6 7 8 |
from dateutil.relativedelta import relativedelta test_time = dateutil.parser.parse("2019-10-20 12:34:56") print(test_time - relativedelta(years=2)) print(test_time - relativedelta(months=2)) print(test_time - relativedelta(days=2)) print(test_time - relativedelta(hours=2)) print(test_time - relativedelta(minutes=2)) print(test_time - relativedelta(seconds=2)) |
1 2 3 4 5 6 |
2017-10-20 12:34:56 2019-08-20 12:34:56 2019-10-18 12:34:56 2019-10-20 10:34:56 2019-10-20 12:32:56 2019-10-20 12:34:54 |
2019年10月20日12時34分56秒の2年前、2ヶ月前・・・を順次取得していってます。
引き算を足し算にすれば2年後、2ヶ月後・・・の日時を取得することが出来ます。
以上、Pythonによる日時の計算方法あれこれでした。