stMind

You'll never blog alone

pythonのdatetimeとdateutilを使って日付を比較

月毎のフォルダにバックアップを保存している状況で、一定期間経過して古くなったフォルダを
消すことを考える。例えば、半年より前のフォルダは削除のように。

pythonでは、datetimeとdateutilのrelativedeltaを使って日付の比較が出来る。

#-*- encoding: utf-8 -*-
from datetime import datetime
from dateutil.relativedelta import *

def main():
    ms = ['201201', '201202', '201203', '201204', '201205', '201206',
          '201207', '201208', '201209', '201210', '201211', '201212']

    today = datetime.today()

    N = -6
    for m in ms:
        if today + relativedelta(months=N) > datetime.strptime(m, '%Y%m'):
            print 'old: %s' %m
        else:
            print 'new: %s' %m
    
if __name__ == '__main__':
    main()

今日の日付todayに対してrelativedeltaで半年前の日付を計算。フォルダ名を想定したms配列の
各要素について、strptimeでフォーマット指定でdatetimeオブジェクトを作成して比較。
結果は

$ python date.py 
old: 201201
old: 201202
old: 201203
old: 201204
old: 201205
old: 201206
old: 201207
old: 201208
old: 201209
new: 201210
new: 201211
new: 201212

となりました。年月だけの場合、strptimeでは

In [48]: datetime.strptime('201209', '%Y%m')
Out[48]: datetime.datetime(2012, 9, 1, 0, 0)

と日以降が作成されるので、201209もoldと判定されています。

datetimeとdatetimeutil、いいですね。