Используя стандартную библиотеку Python datetime, вы можете создать объект datetime из строки даты и получить из него название дня недели или месяца в виде строки. Однако язык этих строк зависит от локали (настройки страны или региона) среды.
Вот два способа получить название дня недели или месяца из даты в виде строки на любом языке.
- Измените локаль с помощью модуля locale
- Определите новую функцию
Для получения дополнительной информации о базовом использовании модуля datetime и методов strptime() и strftime() для преобразования между датой и временем (date, time) и строками, пожалуйста, обратитесь к следующим статьям.
- Похожие статьи:Преобразование дат и времени в строки и из строк с помощью datetime в Python(
strftime
,strptime
)
Изменение локали с помощью модуля locale
Стандартная библиотека Python предоставляет модуль locale для управления настройками локали.
Это зависит от среды, но в среде примера, используя следующий код форматирования в методе strftime(), можно получить названия дней недели и месяцев в английской нотации.%A
, %a
, %B
, %b
В следующем примере используется объект datetime для представления даты и времени (дата и время), но то же самое справедливо и для объекта date, который содержит только информацию о дате.
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
LC_TIME, параметр категории локали для форматирования времени, проверяется с помощью locale.getlocale(), и он устанавливается на None. Этот результат зависит от окружения.
print(locale.getlocale(locale.LC_TIME))
# (None, None)
LC_TIME на японский (UTF-8) ja_JP.UTF-8 в locale.setlocale(), чтобы получить названия дня и месяца на японском языке. locale.LC_ALL можно использовать для установки всех категорий локали, но учтите, что это повлияет, например, на LC_MONETARY, например.
Обратите внимание, что эти изменения действуют только в данном коде. Это не означает, что переменные системного окружения будут переписаны.
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
Вы также можете изменить настройки локали, чтобы использовать другие языковые обозначения, например, английский или немецкий.
locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# Monday, Mon, January, Jan
locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# Montag, Mo, Januar, Jan
Если вы хотите получить день недели для заданной даты из строки даты на любом языке, вы можете сделать это, выполнив следующие действия.
- LC_TIME в значение желаемой языковой настройки (например, ja_JP.UTF-8) в locale.setlocale()
- Преобразование строки в объект времени с помощью функции strptime()
- Вызовите функцию strftime() для этого объекта datetime со следующим кодом форматирования:
%A
,%a
,%B
,%b
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
s = '2018-01-01'
s_dow = datetime.datetime.strptime(s, '%Y-%m-%d').strftime('%A')
print(s_dow)
# 月曜日
Определите новую функцию
Этого можно достичь, определив новую функцию.
Метод weekday() объекта datetime выдает целочисленное значение 0 для понедельника и 6 для воскресенья.
import datetime
dt = datetime.datetime(2018, 1, 1)
print(dt)
# 2018-01-01 00:00:00
print(dt.weekday())
# 0
print(type(dt.weekday()))
# <class 'int'>
Существует аналогичный метод isoweekday(), который возвращает целочисленное значение 1 для понедельника и 7 для воскресенья. Обратите внимание, что существует тонкое различие.
print(dt.isoweekday())
# 1
print(type(dt.isoweekday()))
# <class 'int'>
Если мы определим список названий дней недели для каждой языковой строки и получим их с помощью целочисленных значений, полученных методом weekday(), мы сможем достичь нашей цели.