Python Cookbook [3.15. Converting Strings into Datetimes : 文字列を Datetime 型へ変換する] 投稿一覧へ戻る
Published 2020年4月21日18:59 by mootaro23
SUPPORT UKRAINE
- Your indifference to the act of cruelty can thrive rogue nations like Russia -
Problem:
日付形式の文字列を datetime オブジェクトへ変換したい。
Solution:
Python 標準の datetime モジュールの利用で簡単に実現できます。
datetime.strptime() メソッドは非常に多くの書式コードをサポートしています。
上の例で言えば、%Y は「年」を10進数4桁で表し、%m は「月」を10進数2桁で表します。
これらの書式コードは datetime オブジェクトを文字列に置き換える際にも利用できます。
strptime() メソッドの動作速度は期待ほどには速くないかもしれません。
それは、strptime() が純粋に Python で記述され、システムのロケール設定を考慮に入れて動作しているためです。
もしプログラム内で多量の「文字列 → datetime」変換を実行する必要があり、かつ、文字列による日付表現フォーマットが正確に決まっているのであれば、独自の変換用メソッドを用意するのも一考です。
例えば、文字列形式が "YYYY-MM-DD" で決まっているならば、以下のような関数になるかもしれません。
試行したところ、 datetime.strptime() メソッドの約7倍の処理速度でした。
考慮の余地はあると思います。
日付形式の文字列を 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)
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(火)'
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)
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倍の処理速度でした。
考慮の余地はあると思います。
この記事に興味のある方は次の記事にも関心を持っているようです...
- People who read this article may also be interested in following articles ... -