Pridobite dan v tednu ali mesecu iz datuma v Pythonu kot niz (npr. v nemščini ali angleščini)

Posel

S standardno knjižnico datetime v Pythonu lahko iz datumskega niza ustvarite objekt datetime in iz njega kot niz dobite ime dneva v tednu ali mesecu. Vendar pa je jezik teh nizov odvisen od lokalnega okolja (nastavitev države ali regije).

Tukaj sta dva načina za pridobitev imena dneva v tednu ali mesecu iz datuma kot niza v katerem koli jeziku.

  • Spreminjanje lokalnega jezika z modulom locale
  • Opredelitev nove funkcije

Za več informacij o osnovni uporabi modula datetime ter metod strptime() in strftime() za pretvorbo med datumom in časom (date, time) ter nizi glejte naslednje članke.

Spreminjanje lokalnega jezika z modulom locale

Standardna knjižnica Python zagotavlja modul locale za nadzor nastavitev lokalnega jezika.

To je odvisno od okolja, vendar lahko v primernem okolju z uporabo naslednje kode za oblikovanje v metodi strftime() dobimo imena dni v tednu in mesecev v angleškem zapisu.
%A, %a, %B, %b

Naslednji primer uporablja objekt datetime za predstavitev datuma in časa (datum in čas), enako pa velja tudi za objekt date, ki vsebuje samo podatke o datumu.

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, nastavitev kategorije locale za oblikovanje časa, se preveri s funkcijo locale.getlocale() in je nastavljena na None. Ta rezultat je odvisen od okolja.

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

LC_TIME v japonščino (UTF-8) ja_JP.UTF-8 v locale.setlocale() za pridobitev imen dneva in meseca v japonščini. locale.LC_ALL lahko uporabite za nastavitev vseh kategorij lokala, vendar upoštevajte, da bo to vplivalo npr. na LC_MONETARY, npr.

Upoštevajte, da te spremembe veljajo samo v tej kodi. To ne pomeni, da bodo spremenljivke sistemskega okolja napisane na novo.

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

Nastavitve lokalnega okolja lahko spremenite tudi tako, da uporabite druge jezikovne zapise, na primer angleščino ali nemščino.

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

Če želite iz datumskega niza v katerem koli jeziku pridobiti dan v tednu za določen datum, lahko to storite po naslednjih korakih.

  • LC_TIME na vrednost želene jezikovne nastavitve (npr. ja_JP.UTF-8) v locale.setlocale()
  • Pretvarjanje niza v objekt z datumom s funkcijo strptime()
  • Pokličite funkcijo strftime() za objekt datetime z naslednjo kodo za oblikovanje: %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)
# 月曜日

Opredelitev nove funkcije

To je mogoče doseči z opredelitvijo nove funkcije.

Metoda weekday() objekta datetime poda celoštevilsko vrednost 0 za ponedeljek in 6 za nedeljo.

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

Obstaja podobna metoda isoweekday(), ki vrne celoštevilsko vrednost 1 za ponedeljek in 7 za nedeljo. Upoštevajte, da je tu majhna razlika.

print(dt.isoweekday())
# 1

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

Če za vsak jezikovni niz določimo seznam imen dni v tednu in jih pridobimo s celoštevilskimi vrednostmi, pridobljenimi z metodo weekday(), lahko dosežemo svoj cilj.

Copied title and URL