Атрымаць дзень тыдня або месяца з даты ў Python у выглядзе радка (напрыклад, нямецкая або англійская)

Бізнэс

Выкарыстоўваючы стандартную бібліятэку Python datetime, вы можаце стварыць аб’ект datetime з радка даты і атрымаць назву дня тыдня або месяца з яго ў выглядзе радка. Аднак мова гэтых радкоў залежыць ад лакалі (настройкі краіны або рэгіёну) асяроддзя.

Вось два спосабы атрымаць назву дня тыдня або месяца з даты ў выглядзе радка на любой мове.

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

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

Змяніць лакаль з дапамогай модуля лакалі

Стандартная бібліятэка Python забяспечвае моўны модуль для кіравання наладамі моўнага стандарту.

Гэта залежыць ад асяроддзя, але ў прыкладным асяроддзі, выкарыстоўваючы наступны код фарматавання ў метадзе strftime(), назвы дзён тыдня і месяцаў можна атрымаць у англійскай натацыі.
%A,%a,%B,%b

У наступным прыкладзе выкарыстоўваецца аб’ект datetime для прадстаўлення даты і часу (даты і часу), але тое ж самае дакладна і для аб’екта даты, які мае толькі інфармацыю аб даце.

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() для гэтага аб’екта даты і часу з наступным кодам фарматавання:%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