12
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonで日付から曜日を取得する際に`locale.Error: unsupported locale setting`が出た時の対処法

Last updated at Posted at 2020-01-07

Pythonで日付から曜日を取得したい

以下のようなイメージ
2019-01-07 00:00:00⇒火曜日

実行環境

  • Windows10 Pro
  • Python 3.7.4

やったこと

こちらの記事を参考になりそうだったので、ほぼコピペして実行。
Pythonで日付から曜日や月を文字列(日本語や英語など)で取得

localeモジュールでロケールを変更すれば取得できるらしい。

time_test.py
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.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')の部分を上記の書き方に変更してみると…

time_test.py
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

想定通りの結果が取得できました。

12
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?