2016/04/20更新

[Python] 1ヶ月後や1年後や月初や月末を簡単に求める(python-dateutil)

このエントリーをはてなブックマークに追加            

こんにちは、@yoheiMuneです。
今日はPythonの日付演算で便利なpython-dateutilを使って、1ヶ月後などを簡単に求める方法をブログに書きたいと思います。

画像

目次




python-dateutilとは

python-dateutilは、Pythonの日付処理をより簡単に行えるためのライブラリです。いろいろな機能があるのですが今回はその中で、relativedeltaを用いた日付の加減算処理を紹介したいと思います。

Python標準のtimedeltaでも日付の加減算ができるのですが、指定できる引数に限りがあり使いづらい場合があります。
# timedeltaで指定できる内容
# https://docs.python.org/3.5/library/datetime.html
class datetime.timedelta(days=0,
                         seconds=0,
                         microseconds=0,
                         milliseconds=0,
                         minutes=0,
                         hours=0,
                         weeks=0)

# relativedelta(python-dateutil)で指定できる内容
# https://github.com/dateutil/dateutil/blob/master/dateutil/relativedelta.py
class relativedelta(object):
    def __init__(self, dt1=None, dt2=None,
                 years=0, months=0, days=0, leapdays=0, weeks=0,
                 hours=0, minutes=0, seconds=0, microseconds=0,
                 year=None, month=None, day=None, weekday=None,
                 yearday=None, nlyearday=None,
                 hour=None, minute=None, second=None, microsecond=None):
relaticedeltaの方が指定できる内容が数多くあるので(リファレンス見ないとよくわからんやつもある)、便利に日付の演算を行うことができます。

インストールは簡単でpipで行うことができます。
$ pip install --upgrade python-dateutil
それでは実際に使ってみたいと思います。



python-dateutilを用いて、簡単に1ヶ月後などを求める

それではさっそく使ってみたいと思います。
from datetime import datetime, date, timedelta
from dateutil.relativedelta import relativedelta

# today
today = date.today()
print(today) # => 2016-04-19

# 1ヶ月後
dt = today + relativedelta(months=1)
print(dt) # => 2016-05-19

# 1年後
dt = today + relativedelta(years=1)
print(dt) # => 2017-04-19

# 月末
dt = today + relativedelta(months=1) - timedelta(days=today.day)
print(dt) # => 2016-04-30

# 月初(これはtimedeltaで普通にできるけど、一応書いてみる)
dt = today - timedelta(days=today.day-1)
print(dt) # => 2016-04-01
こんな感じで、timedeltaでは計算するのが大変なところもいい感じに処理することができます。



参考資料

今回の実装を行うために、以下を参照しました。ありがとうございます。

dateutil - powerful extensions to datetime — dateutil 2.5.2 documentation



最後に

Pythonは言語そのものが非常に使いやすいのですが、こーゆうライブラリがちょこちょこあるとさらに使いやすさアップでいいですね。とても良いエコシステムだなと感じています。これからもPythonでの実装力を上げるべく、バシバシとブログを書きたいと思います。

最後になりますが本ブログでは、フロントエンド・Python・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。