Выкарыстоўваючы стандартную бібліятэку Python datetime, вы можаце стварыць аб’ект datetime з радка даты і атрымаць назву дня тыдня або месяца з яго ў выглядзе радка. Аднак мова гэтых радкоў залежыць ад лакалі (настройкі краіны або рэгіёну) асяроддзя.
Вось два спосабы атрымаць назву дня тыдня або месяца з даты ў выглядзе радка на любой мове.
- Змяніце лакаль з дапамогай модуля лакалі
- Вызначце новую функцыю
Для атрымання дадатковай інфармацыі аб базавым выкарыстанні модуля datetime і метадах strptime() і strftime() для пераўтварэння паміж датай і часам (дата, час) і радкамі, калі ласка, звярніцеся да наступных артыкулаў.
- Падобныя артыкулы:Пераўтварэнне даты і часу ў радкі і з іх з дапамогай даты і часу Python(
strftime
,strptime
)
Змяніць лакаль з дапамогай модуля лакалі
Стандартная бібліятэка 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(), мы зможам дасягнуць нашай мэты.