Python dateutilを使ってみて便利だなーって思った。

表題にあるとおりの話をメモがてら書いておきます。今まで標準のdatetimeとかを使って処理していました。今わたし自身がやりたいな〜とか思う範囲だったらdatetimeでもぜんぜんまかなえちゃうような感じではあるんですが。じゃぁ数ヶ月後によみやすいコードはどっちよ?となるとやっぱりdateutilのが読みやすそうだよね、というのが個人的な感想です。

「今更dateutilかよ!」とPython界隈の人に怒られそうですが。。。初学者ということで許してね。

dateutilそのもの詳細については、このサイトとかこのサイトとかを読んでいただければスッキリわかりますのでお読みください!以下わたしの駄文に付き合わなくてだいじょうぶ!

dateutilはメジャーなライブラリ。importしてあげればしゅっと簡単に使えます。

from dateutil.relativedelta import *

今回わたしが書いたのはこちらのソース。とにかくdateutil使ってみたかっただけ。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'maaya_ishida'

from datetime import *
from dateutil.relativedelta import *

def test_date():
    # 3ヶ月前の11日から処理をスタートする
    targetdate = datetime.now() + relativedelta(day=11, months=-3)
    startdate = datetime.now() + relativedelta(day=11, months=-2)

    print('targetdate' + targetdate.strftime('%Y-%m-%d'))
    print('startdate' + startdate.strftime('%Y-%m-%d'))

    # 3ヶ月前〜2ヶ月前
    targetdate = test_in_roop(targetdate, startdate, ': 3ヶ月前から2ヶ月前まで')
    # 2ヶ月前〜当月10日まで
    enddate = datetime.now() + relativedelta(day=10)
    test_in_roop(targetdate, enddate, ': 2ヶ月前から今月10日まで')

def test_in_roop(targetdate, enddate, print_word):
    # ループ内汎用処理
    while targetdate < enddate:
        print_date = targetdate.strftime('%Y-%m-%d')
        print(print_date + print_word)

        # whileを回すために1日追加
        targetdate = targetdate + relativedelta(days=+1)

    return targetdate

def main():
    test_date()

if __name__ == '__main__':
    main()

気に入っているのは日付の足し算引き算がメソッドの引数からわかりやすいところ。daysなのかweeksなのか足すのか引くのかが忘れた頃に読んでも、見やすいですね!ちょっと気をつけようと思うのは、daysとday(week/monthなどもしかり)などの読み間違い。dayだけだと日付決め打ち(Xヶ月後のday日)の指定になってしまうので気をつけないと大惨事です。

広告