検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
>>
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倍の処理速度でした。
考慮の余地はあると思います。