Pythonで、文字列で日付などを受け取って処理したいことがよくあるのですが、毎回ググっているので自分用にまとめておきます。
私の場合は、文字列→datetime→文字列とすることで処理しています。
#前提
日付を文字列で受け取ります。
例えば以下の様な場合があると思います。
- 2014-10-16
- 2014/10/16 20:29:39
これらの1日後が欲しい、とかいう場合にどうするかという話です。
#文字列→datetime
まず文字列をparseします。
import datetime
#1の場合
date1 = '2014-10-16'
d = datetime.datetime.strptime(date1, '%Y-%m-%d')
#2の場合
date2 = '2014/10/16 20:29:39'
d = datetime.datetime.strptime(date2, '%Y/%m/%d %H:%M:%S')
こうすることでdatetime
に変換できます。
上記の%Y-%m-%d
を変えることで他のフォーマットでも対応できます。
#datetimeの処理
timedelta
を使ってdatetime
を計算します。
今は1日後が欲しいので、
d += datetime.timedelta(days = 1)
のようにすると1日後が得られます。
足さずに引けば1日前ですし、days
をhours
に変えたら日付ではなく時間が操作できます。
#datetime→文字列
最後にdatetime
を文字列に戻します。
date_stringj = d.strftime('%Y-%m-%d')
こうすると指定したフォーマットで文字列にしてくれます。
#まとめ
これらをまとめて、文字列で日付を受け取って1日加算するプログラムが以下です。
add_1day.py
#!/usr/bin/python
import datetime
date_string_input = '2014-10-31'
date_format = '%Y-%m-%d'
#文字列→datetime
d = datetime.datetime.strptime(date_string_input, date_format)
#datetimeの処理
d += datetime.timedelta(days = 1)
#datetime→文字列
date_string_output = d.strftime(date_format)
print date_string_output
実行すると以下のようになります。
$ python time.py
2014-11-01