Posted at

Pythonで文字列の日付操作

More than 5 years have passed since last update.

Pythonで、文字列で日付などを受け取って処理したいことがよくあるのですが、毎回ググっているので自分用にまとめておきます。

私の場合は、文字列→datetime→文字列とすることで処理しています。


前提

日付を文字列で受け取ります。

例えば以下の様な場合があると思います。


  1. 2014-10-16

  2. 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日前ですし、dayshoursに変えたら日付ではなく時間が操作できます。


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