検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
img_for_tre_tron
Tré Thộn を食べたことがありますか?
ベトナム・ビンズオン滞在中の方は是非注文して食べてみて!
絶対に美味しいです!
ホーチミン市内へも配達可能です。お問い合わせください。

Have you ever had "Tré Thộn" before?
If you're living at Bình Dương in Vietnam, you "must" try to order and eat it.
I'm sure you're very surprised how delicious it is!!
If you're in Hồ Chí Minh, you have a chance to get it too. Please call!!
>>
python_cookbook

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 モジュールの利用で簡単に実現できます。

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倍の処理速度でした。
考慮の余地はあると思います。