Obțineți ziua săptămânii sau a lunii dintr-o dată în Python sub forma unui șir de caractere (de exemplu, în germană sau engleză)

Afaceri

Utilizând biblioteca standard datetime din Python, puteți crea un obiect datetime dintr-un șir de date și puteți obține numele zilei săptămânii sau al lunii ca șir de caractere. Cu toate acestea, limba acestor șiruri depinde de locale (setarea țării sau a regiunii) din mediul înconjurător.

Iată două modalități de a obține numele zilei săptămânii sau al lunii dintr-o dată sub forma unui șir de caractere în orice limbă.

  • Schimbați locația cu modulul locale
  • Definiți o nouă funcție

Pentru mai multe informații privind utilizarea de bază a modulului datetime și a metodelor strptime() și strftime() pentru conversia între data și ora (date, time) și șiruri de caractere, vă rugăm să consultați următoarele articole.

Schimbați locale cu modulul locale

Biblioteca standard Python oferă un modul locale pentru a controla setările locale.

Depinde de mediu, dar în mediul de exemplu, folosind următorul cod de formatare în metoda strftime(), numele zilelor săptămânii și ale lunilor pot fi obținute în notație engleză.
%A, %a, %B, %b

Exemplul următor utilizează un obiect datetime pentru a reprezenta data și ora (data și ora), dar același lucru este valabil și pentru un obiect date care conține doar informații despre dată.

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, setarea categoriei locale pentru formatarea orei, este verificată cu locale.getlocale() și este setată la None. Acest rezultat depinde de mediu.

print(locale.getlocale(locale.LC_TIME))
# (None, None)

LC_TIME în japoneză (UTF-8) ja_JP.UTF-8 în locale.setlocale() pentru a obține numele zilelor și lunilor în japoneză. locale.LC_ALL poate fi utilizat pentru a seta toate categoriile locale, dar rețineți că acest lucru va afecta, de exemplu, LC_MONETARY, de exemplu.

Rețineți că aceste modificări sunt valabile numai în acest cod. Aceasta nu înseamnă că variabilele de mediu ale sistemului vor fi rescrise.

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

Puteți, de asemenea, să modificați setările locale pentru a utiliza notații în alte limbi, cum ar fi engleza sau germana.

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

Dacă doriți să obțineți ziua săptămânii pentru o anumită dată dintr-un șir de date în orice limbă, puteți face acest lucru urmând pașii de mai jos.

  • LC_TIME la valoarea setării limbii dorite (de exemplu, ja_JP.UTF-8) în locale.setlocale()
  • Conversia unui șir de caractere într-un obiect datetime cu strptime()
  • Apelați strftime() pe acel obiect datetime cu următorul cod de formatare: %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)
# 月曜日

Definiți o nouă funcție

Acest lucru poate fi realizat prin definirea unei noi funcții.

Metoda weekday() a obiectului datetime oferă o valoare întreagă de 0 pentru luni și 6 pentru duminică.

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'>

Există o metodă similară, isoweekday(), care returnează o valoare întreagă de 1 pentru luni și 7 pentru duminică. Rețineți că există o diferență subtilă.

print(dt.isoweekday())
# 1

print(type(dt.isoweekday()))
# <class 'int'>

Dacă definim o listă de nume ale zilelor săptămânii pentru fiecare șir de limbi și le recuperăm folosind valorile întregi obținute prin metoda weekday(), ne putem atinge obiectivul.