Получаване на деня от седмицата или месеца от дадена дата в Python като низ (напр. немски или английски)

Бизнес

С помощта на стандартната библиотека datetime на Python можете да създадете обект datetime от низ с дата и да получите името на деня от седмицата или месеца от него като низ. Езикът на тези низове обаче зависи от локала (настройката на страната или региона) на средата.

Ето два начина за получаване на името на деня от седмицата или месеца от дадена дата като низ на всеки език.

  • Промяна на локала с помощта на модула locale
  • Дефиниране на нова функция

За повече информация относно основното използване на модула datetime и методите strptime() и strftime() за конвертиране между дата и час (date, time) и низове, моля, вижте следните статии.

Промяна на локала с модула 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(), можем да постигнем целта си.

Copied title and URL