Dapatkan hari dalam minggu atau bulan daripada tarikh dalam Python sebagai rentetan (cth. Jerman atau Inggeris)

Perniagaan

Menggunakan datetime perpustakaan standard Python, anda boleh mencipta objek datetime daripada rentetan tarikh dan mendapatkan nama hari dalam minggu atau bulan daripadanya sebagai rentetan. Walau bagaimanapun, bahasa rentetan tersebut bergantung pada tempat (tetapan negara atau wilayah) persekitaran.

Berikut ialah dua cara untuk mendapatkan nama hari dalam minggu atau bulan daripada tarikh sebagai rentetan dalam mana-mana bahasa.

  • Tukar locale dengan locale module
  • Tentukan fungsi baharu

Untuk mendapatkan maklumat lanjut tentang penggunaan asas modul datetime dan kaedah strptime() dan strftime() untuk menukar antara tarikh dan masa (tarikh, masa) dan rentetan, sila rujuk artikel berikut.

Tukar locale dengan locale module

Pustaka standard Python menyediakan modul setempat untuk mengawal tetapan setempat.

Ia bergantung pada persekitaran, tetapi dalam persekitaran contoh, menggunakan kod pemformatan berikut dalam kaedah strftime(), nama hari dalam minggu dan bulan boleh diperolehi dalam tatatanda bahasa Inggeris.
%A,%a,%B,%b

Contoh berikut menggunakan objek datetime untuk mewakili tarikh dan masa (tarikh dan masa), tetapi perkara yang sama berlaku untuk objek tarikh yang hanya mempunyai maklumat tarikh.

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, tetapan kategori tempat untuk pemformatan masa, disemak dengan locale.getlocale(), dan ia ditetapkan kepada Tiada. Keputusan ini bergantung kepada persekitaran.

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

LC_TIME ke Jepun (UTF-8) ja_JP.UTF-8 dalam locale.setlocale() untuk mendapatkan nama hari dan bulan dalam bahasa Jepun. locale.LC_ALL boleh digunakan untuk menetapkan semua kategori tempatan, tetapi ambil perhatian bahawa ini akan menjejaskan, contohnya LC_MONETARY, sebagai contoh.

Ambil perhatian bahawa perubahan ini hanya berkesan dalam kod ini. Ini tidak bermakna pembolehubah persekitaran sistem akan ditulis semula.

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

Anda juga boleh menukar tetapan tempat untuk menggunakan tatatanda bahasa lain, seperti bahasa Inggeris atau Jerman.

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

Jika anda ingin mendapatkan hari dalam minggu untuk tarikh tertentu daripada rentetan tarikh dalam mana-mana bahasa, anda boleh berbuat demikian dengan mengikuti langkah di bawah.

  • LC_TIME kepada nilai tetapan bahasa yang diingini (cth. ja_JP.UTF-8) dalam locale.setlocale()
  • Menukar rentetan kepada objek datetime dengan strptime()
  • Panggil strftime() pada objek datetime itu dengan kod pemformatan berikut:%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)
# 月曜日

Tentukan fungsi baharu

Ini boleh dicapai dengan mentakrifkan fungsi baharu.

Kaedah hari minggu() bagi objek datetime memberikan nilai integer 0 untuk hari Isnin dan 6 untuk Ahad.

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

Terdapat kaedah yang serupa, isoweekday(), yang mengembalikan nilai integer 1 untuk Isnin dan 7 untuk Ahad. Perhatikan bahawa terdapat perbezaan yang ketara.

print(dt.isoweekday())
# 1

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

Jika kami mentakrifkan senarai nama hari dalam seminggu untuk setiap rentetan bahasa dan mendapatkannya menggunakan nilai integer yang diperolehi oleh kaedah hari minggu(), kami boleh mencapai matlamat kami.