Отримати день тижня або місяць із дати в Python у вигляді рядка (наприклад, німецька чи англійська)

Бізнес

Використовуючи стандартну бібліотеку Python datetime, ви можете створити об’єкт datetime з рядка дати та отримати ім’я дня тижня чи місяця з нього у вигляді рядка. Однак мова цих рядків залежить від локалі (налаштування країни або регіону) середовища.

Ось два способи отримати назву дня тижня або місяця з дати у вигляді рядка будь-якою мовою.

  • Змініть локаль за допомогою модуля локалі
  • Визначте нову функцію

Для отримання додаткової інформації про базове використання модуля datetime і методів strptime() і strftime() для перетворення між датою і часом (дата, час) і рядками, будь ласка, зверніться до наступних статей.

Змінити локаль за допомогою модуля локалі

Стандартна бібліотека Python надає модуль локалі для керування параметрами мовного стандарту.

Це залежить від середовища, але в середовищі прикладу, використовуючи наступний код форматування в методі 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(), і для нього встановлено значення Немає. Цей результат залежить від навколишнього середовища.

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()
  • Перетворення рядка в об’єкт datetime за допомогою 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(), ми зможемо досягти своєї мети.

Copied title and URL