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

エージェントへの登録はお済みですか?

今すぐフリーランスになる気がなくても、エージェントへの登録は済ませておくことをお勧めします。理由はストレスや疲労が限界に達してからだと遅いから。

現在の自身のフリーランスとしての価値・単価相場を把握できますし、条件にあった案件をキャッチできるようになるので、いざフリーランスになろうとした際に早期に手が打てます。

エージェント登録は無料なので、今はフリーランスにならなくとも登録だけはしておくべきです。

真っ先に登録すべきエージェントは、圧倒的に多くのクライアントを開拓しているDYMテック。2500社の優良な取引先と、条件交渉力が強く高条件で仕事を紹介してくれるエージェントです。

案件紹介のみでなく、エンジニアとしてのキャリア相談や業界動向のキャッチアップなど、フリーランス対してのサポートも充実していますので、初めてフリーランスに挑戦する方も安心です。

DYMテックの詳細を見る

フリーランスエンジニアの働き方
スポンサーリンク
shigotoswitchをフォローする
しごとスイッチ