MENU

Pythonの日付と時刻

Pythonで日付と時刻を扱うのには、datetimeモジュールを使います。
この記事では、datetimeモジュールと、日付と時刻の計算に便利なdateutil.relativedeltaモジュールについて解説します。

目次

datetime

datetimeは日付と時刻を格納します。

現在の日付と時刻を取得するのは、datetime.now()を使います。

>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2020, 11, 19, 11, 47, 58, 831194)

datetimeにはマイクロセカンドまで格納されていますので、緻密な時間計算もできます。

date

date日付を格納します。

現在の日付を取得するのは、date.today()を使います。

>>> from datetime import date
>>> date.today()
datetime.date(2020, 11, 19)

time

timeは時刻を格納します。

現在時刻を取得するメソッドは用意されていません。

それと、

import time

で取得するtimeモジュールとは別物ですので注意してください。
こちらのtimeはスリープ処理に使われます。

>>> import time
>>> time.sleep(1)

文字列との変換

datetimeを文字列に変換するのはstrftime、文字列をdatetimeに変換するのはstrptimeを使います。

>>> from datetime import datetime
>>> str = datetime.now().strftime('%Y年%m月%d日 %H時%M分%S秒')
>>> str
'2020年11月19日 12時04分18秒'
>>> dt = datetime.strptime(str, '%Y年%m月%d日 %H時%M分%S秒')
>>> dt
datetime.datetime(2020, 11, 19, 12, 4, 18)

ここで、%Yとか%mとかいう識別子はそれぞれ年や月を表します。

AwareとNaive,tzinfo

日時のオブジェクトは、それらがタイムゾーンの情報を含んでいるかどうかによって “aware” あるいは “naive” に分類されます。

引用:https://docs.python.org/ja/3/library/datetime.html

datetimeは、タイムゾーンの情報を含むawareタイプとタイムゾーンの情報を含まないnaiveタイプに分類されます。
タイムゾーンの情報はtzinfoで与えます。

>>> from datetime import datetime
>>> now = datetime.now()
>>> time1 = datetime(now.year, now.month, now.day, tzinfo=timezone(timedelta(hours=9)))
>>> time2 = datetime(now.year, now.month, now.day)
>>> time1
datetime.datetime(2020, 11, 19, 0, 0, tzinfo=datetime.timezone(datetime.timedelta(seconds=32400)))
>>> time2
datetime.datetime(2020, 11, 19, 0, 0)
>>> if time1 != time2:
...     print('time1とtime2は違います')
...
time1とtime2は違います

timedelta

timedeltaは日付と時刻の計算に使います。
時刻は自由に指定できますが、日付は日しか指定できません。

>>> from datetime import datetime,timedelta
>>> now = datetime.now()
>>> tommorow = now + timedelta(days=1)
>>> now
datetime.datetime(2020, 11, 19, 12, 25, 2, 759598)
>>> tommorow
datetime.datetime(2020, 11, 20, 12, 25, 2, 759598)
>>> after1hour = now + timedelta(hours=1)
>>> after1hour
datetime.datetime(2020, 11, 19, 13, 25, 2, 759598)

relativedelta

年や月を計算に使いたいときは、dateutilモジュールのrelativedeltaを使います。

dateutilモジュールは次のコマンドでインストールします。

pip install python-dateutil

例えば1つ月を足すのは

>>> from datetime import datetime
>>> from dateutil.relativedelta import relativedelta
>>> now = datetime.now()
>>> nextmonth = now + relativedelta(months=1)
>>> now
datetime.datetime(2020, 11, 19, 12, 33, 22, 959051)
>>> nextmonth
datetime.datetime(2020, 12, 19, 12, 33, 22, 959051)

で計算できます。

これを使うと、月末の日を求めることもできます。

>>> dt = datetime(now.year, now.month, 1)
>>> dt = dt + relativedelta(months=1)
>>> dt = dt - relativedelta(days=1)
>>> dt
datetime.datetime(2020, 11, 30, 0, 0)

まとめ

この記事ではdatetimeモジュールとrelativedeltaについて解説しました。
日付と時刻はその性質上、手軽に扱うというわけにはいきませんが、それでもPythonの場合は比較的簡潔に扱えるということが分かったと思います。
日付と時刻はシステム構築で頻繁に使いますので、慣れていきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

管理人のよしぞと申します。
フリーランス業界で働いている管理人が、業界で働く様々な視点からフリーランスエンジニアに挑戦するためのノウハウを掲載。独立を考えている方にとって手助けになるサイトを目指しています。

目次