Pythonで日付から曜日を取得したい
以下のようなイメージ
2019-01-07 00:00:00
⇒火曜日
実行環境
- Windows10 Pro
- Python 3.7.4
やったこと
こちらの記事を参考になりそうだったので、ほぼコピペして実行。
Pythonで日付から曜日や月を文字列(日本語や英語など)で取得
localeモジュールでロケールを変更すれば取得できるらしい。
time_test.pyimport datetime import locale dt = datetime.datetime(2018, 1, 1) print(dt) # 2018-01-01 00:00:00 print(dt.strftime('%A, %a, %B, %b')) # Monday, Mon, January, Jan locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8') print(locale.getlocale(locale.LC_TIME)) # ('ja_JP', 'UTF-8') print(dt.strftime('%A, %a, %B, %b')) # 月曜日, 月, 1月, 1
上記のような参考コードがあったので実行したところエラーに…
2018-01-01 00:00:00
Monday, Mon, January, Jan
Traceback (most recent call last):
File ".\time_test.py", line 11, in <module>
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
File "C:\Users\XXXXX\AppData\Local\Programs\Python\Python37\lib\locale.py", line 604, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
locale.Error: unsupported locale setting
とあるのでsetlocale
で指定する言語と地域が間違ってる感じがする。
エラー対応
setlocale
で渡す引数をちゃんと確認してみる。
locale --- Pythonドキュメント
まずは以下のようなコードを書けと書いてある。
import locale locale.setlocale(locale.LC_ALL, '')
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
の部分を上記の書き方に変更してみると…
import datetime
import locale
dt = datetime.datetime(2018, 1, 1)
print(dt)
# 2018-01-01 00:00:00
print(dt.strftime('%A, %a, %B, %b'))
# Monday, Mon, January, Jan
#locale.setlocale(locale.LC_TIME, 'ja-JP')
locale.setlocale(locale.LC_ALL, '')
print(locale.getlocale(locale.LC_TIME))
print(dt.strftime('%A, %a, %B, %b'))
# 月曜日, 月, 1月, 1
出力結果
2018-01-01 00:00:00
Monday, Mon, January, Jan
('Japanese_Japan', '932')
月曜日, 月, 1月, 1
取得したい曜日が表示できました。
print(locale.getlocale(locale.LC_TIME))
で出力結果が('Japanese_Japan', '932')
となっているので、原因はja_JP
で指定していたことだろうと推測。
locale.setlocale(locale.LC_ALL, '')
を
locale.setlocale(locale.LC_TIME, 'Japanese_Japan.UTF-8')
に変更しても日本語の結果が得られそうだったので実行。
('Japanese_Japan', 'utf8')
月曜日, 月, 1月, 1
想定通りの結果が取得できました。