Python’daki bir tarihten haftanın veya ayın gününü bir dize olarak alın (örneğin, Almanca veya İngilizce)

Python’un standart kütüphane tarih saatini kullanarak, bir tarih dizesinden bir tarih saat nesnesi oluşturabilir ve ondan haftanın veya ayın gününün adını bir dize olarak alabilirsiniz. Ancak, bu dizelerin dili, ortamın yerel ayarına (ülke veya bölge ayarı) bağlıdır.

İşte herhangi bir dilde bir dize olarak bir tarihten haftanın gününün veya ayın adını almanın iki yolu.

  • Yerel ayar modülüyle yerel ayarı değiştirin
  • Yeni bir işlev tanımlayın

datetime modülünün temel kullanımı ve tarih ve saat (tarih, saat) ve dizeler arasında dönüştürme için strptime() ve strftime() yöntemleri hakkında daha fazla bilgi için lütfen aşağıdaki makalelere bakın.

Yerel ayar modülüyle yerel ayarı değiştirin

Python standart kitaplığı, yerel ayarları kontrol etmek için bir yerel ayar modülü sağlar.

Ortama bağlıdır, ancak örnek ortamda, strftime() yönteminde aşağıdaki biçimlendirme kodu kullanılarak haftanın günlerinin ve ayların adları İngilizce gösterimde elde edilebilir.
%A,%a,%B,%b

Aşağıdaki örnek, tarih ve saati (tarih ve saat) temsil etmek için bir tarih saat nesnesi kullanır, ancak aynısı yalnızca tarih bilgisine sahip bir tarih nesnesi için de geçerlidir.

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

Zaman biçimlendirme için yerel kategori ayarı olan LC_TIME, locale.getlocale() ile kontrol edilir ve Yok olarak ayarlanır. Bu sonuç çevreye bağlıdır.

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

Japonca gün ve ay adlarını almak için locale.setlocale() içinde LC_TIME to Japonca (UTF-8) ja_JP.UTF-8. locale.LC_ALL tüm yerel ayar kategorilerini ayarlamak için kullanılabilir, ancak bunun örneğin LC_MONETARY’yi etkileyeceğini unutmayın.

Bu değişikliklerin yalnızca bu kodda etkili olduğunu unutmayın. Bu, sistem ortamı değişkenlerinin yeniden yazılacağı anlamına gelmez.

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

İngilizce veya Almanca gibi diğer dil gösterimlerini kullanmak için yerel ayarları da değiştirebilirsiniz.

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

Herhangi bir dilde bir tarih dizesinden belirli bir tarih için haftanın gününü almak istiyorsanız, aşağıdaki adımları izleyerek bunu yapabilirsiniz.

  • locale.setlocale() içindeki istenen dil ayarının değerine (ör. ja_JP.UTF-8) LC_TIME
  • strptime() ile bir dizeyi bir datetime nesnesine dönüştürme
  • Aşağıdaki biçimlendirme koduyla o datetime nesnesinde strftime() öğesini çağırın:%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 bir işlev tanımlayın

Bu, yeni bir işlev tanımlayarak başarılabilir.

datetime nesnesininweekday() yöntemi, Pazartesi için 0 ve Pazar için 6 tamsayı değeri 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'>

Pazartesi için 1 ve Pazar için 7 tamsayı değeri döndüren benzer bir yöntem olan isoweekday() vardır. İnce bir fark olduğunu unutmayın.

print(dt.isoweekday())
# 1

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

Her dil dizisi için haftanın günlerinin bir listesini tanımlarsak ve bunlarıweekday() yöntemiyle elde edilen tamsayı değerlerini kullanarak alırsak, amacımıza ulaşabiliriz.

Copied title and URL