python_cookbook

Python Cookbook [3.15. Converting Strings into Datetimes : 文字列を Datetime 型へ変換する] 投稿一覧へ戻る

Tags: datetime , timedelta , strptime , strftime , python , cookbook

Published 2020年4月21日18:59 by T.Tsuyoshi

Problem:
日付形式の文字列を datetime オブジェクトへ変換したい。


Solution:
Python 標準の datetime モジュールの利用で簡単に実現できます。

from datetime import datetime

text = "2020-04-21"
a = datetime.strptime(text, '%Y-%m-%d')
b = datetime(2020, 5, 25, 8, 30, 0)
diff = b - a
diff # → datetime.timedelta(days=34, seconds=30600)



datetime.strptime() メソッドは非常に多くの書式コードをサポートしています。
上の例で言えば、%Y は「年」を10進数4桁で表し、%m は「月」を10進数2桁で表します。


これらの書式コードは datetime オブジェクトを文字列に置き換える際にも利用できます。

days = ['日','月','火','水','木','金','土']

c = datetime.now()
c # → datetime.datetime(2020, 4, 21, 18, 25, 17, 792680)

dow = days[int(datetime.strftime(c, '%w'))] # ← days[c.isoweekday()] でOKですが、無理矢理 strftime() を使ってみました。
str_c = datetime.strftime(c, '%Y/%m/%d') + '(' + dow + ')'
str_c # → '2020/04/21(火)'



strptime() メソッドの動作速度は期待ほどには速くないかもしれません。
それは、strptime() が純粋に Python で記述され、システムのロケール設定を考慮に入れて動作しているためです。


もしプログラム内で多量の「文字列 → datetime」変換を実行する必要があり、かつ、文字列による日付表現フォーマットが正確に決まっているのであれば、独自の変換用メソッドを用意するのも一考です。


例えば、文字列形式が "YYYY-MM-DD" で決まっているならば、以下のような関数になるかもしれません。

from datetime import datetime

def ymd_to_date(d):
year_s, month_s, day_s = d.split('-')
return datetime(int(year_s), int(month_s), int(day_s))

my_date = ymd_to_date('2020-04-21')
my_date # → datetime.datetime(2020, 4, 21, 0, 0)



試行したところ、 datetime.strptime() メソッドの約7倍の処理速度でした。
考慮の余地はあると思います。

この投稿をメールでシェアする

0 comments

コメントはまだありません。

コメントを追加する(不適切と思われるコメントは削除する場合があります)