Python-da bir tarixdən həftənin və ya ayın gününü sətir kimi əldə edin (məsələn, Alman və ya İngilis dili)

Biznes

Python-un standart kitabxana tarix saatından istifadə edərək, siz tarix sətirindən datetime obyekti yarada və ondan həftənin və ya ayın gününün adını sətir kimi əldə edə bilərsiniz. Bununla belə, həmin sətirlərin dili mühitin yerli yerindən (ölkə və ya region parametri) asılıdır.

İstənilən dildə sətir kimi tarixdən həftənin və ya ayın gününün adını əldə etməyin iki yolu var.

  • Yerli modulu ilə yerli dili dəyişdirin
  • Yeni funksiyanı təyin edin

Datetime modulunun əsas istifadəsi və tarix və vaxt (tarix, vaxt) və sətirlər arasında konvertasiya üçün strptime() və strftime() üsulları haqqında ətraflı məlumat üçün aşağıdakı məqalələrə müraciət edin.

Yerli modul ilə yerli dili dəyişdirin

Python standart kitabxanası yerli parametrləri idarə etmək üçün yerli modul təmin edir.

Bu, mühitdən asılıdır, lakin nümunə mühitində strftime() metodunda aşağıdakı formatlaşdırma kodundan istifadə etməklə həftənin günlərinin və ayların adlarını ingilis notasiyası ilə əldə etmək olar.
%A,%a,%B,%b

Aşağıdakı misal tarix və vaxtı (tarix və vaxt) təmsil etmək üçün datetime obyektindən istifadə edir, lakin eyni şey yalnız tarix məlumatı olan tarix obyekti üçün doğrudur.

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, vaxt formatı üçün yerli kateqoriya parametri locale.getlocale() ilə yoxlanılır və o, Yoxdur. Bu nəticə ətraf mühitdən asılıdır.

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

Yapon dilində gün və ay adlarını əldə etmək üçün locale.setlocale() dilində LC_TIME – Yapon (UTF-8) ja_JP.UTF-8. locale.LC_ALL bütün yerli kateqoriyaları təyin etmək üçün istifadə edilə bilər, lakin bunun, məsələn, LC_MONETARY kimi təsir edəcəyini nəzərə alın.

Qeyd edək ki, bu dəyişikliklər yalnız bu kodda effektivdir. Bu o demək deyil ki, sistem mühiti dəyişənləri yenidən yazılacaq.

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

Siz həmçinin ingilis və ya alman kimi digər dil qeydlərindən istifadə etmək üçün yerli parametrləri dəyişə bilərsiniz.

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

İstənilən dildə tarix sətirindən müəyyən bir tarix üçün həftənin gününü almaq istəyirsinizsə, aşağıdakı addımları izləməklə bunu edə bilərsiniz.

  • locale.setlocale()-də istədiyiniz dil parametrinin (məsələn, ja_JP.UTF-8) dəyərinə LC_TIME
  • strptime() ilə sətirin datetime obyektinə çevrilməsi
  • Aşağıdakı formatlaşdırma kodu ilə həmin datetime obyektində strftime()-a zəng edin:%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)
# 月曜日

Yeni funksiyanı təyin edin

Buna yeni bir funksiya təyin etməklə nail olmaq olar.

Datetime obyektinin weekday() metodu bazar ertəsi üçün 0, bazar günü üçün isə 6 tam dəyəri verir.

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

Bənzər bir üsul var, isoweekday(), bazar ertəsi üçün 1, bazar günü üçün isə 7 tam dəyərini qaytarır. Qeyd edək ki, incə fərq var.

print(dt.isoweekday())
# 1

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

Hər bir dil sətri üçün həftənin günlərinin adlarının siyahısını müəyyən etsək və onları weekday() metodu ilə alınan tam qiymətlərdən istifadə etsək, məqsədimizə nail ola bilərik.

Copied title and URL