Pythonの日付と時刻

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の場合は比較的簡潔に扱えるということが分かったと思います。
日付と時刻はシステム構築で頻繁に使いますので、慣れていきましょう。

エージェント登録はリモートワーク特化のエージェントが推し!

今すぐフリーランスにならなくてもエージェント登録は済ませておくことお勧めします。現在の動向や相場・自身の価値を把握できますし、いざフリーランスになろうとした際に早期に手が打てます。

エージェント登録は無料なので登録だけはしておくべきです。

この時代に推したいのはエージェント会社がリモートワーク可能な案件だけを紹介するリモートビズ。 在宅、副業、時短などスタイルに合わせた働き方が可能です。

リモートビズに登録する

Python
shigotoswitchをフォローする
しごとスイッチ