รับวันในสัปดาห์หรือเดือนจากวันที่ใน Python เป็นสตริง (เช่น เยอรมันหรืออังกฤษ)

ธุรกิจ

เมื่อใช้ไลบรารี datetime มาตรฐานของ Python คุณสามารถสร้างอ็อบเจ็กต์ datetime จากสตริงวันที่และรับชื่อของวันในสัปดาห์หรือเดือนจากมันเป็นสตริง อย่างไรก็ตาม ภาษาของสตริงเหล่านั้นขึ้นอยู่กับสถานที่ (การตั้งค่าประเทศหรือภูมิภาค) ของสภาพแวดล้อม

มีสองวิธีในการรับชื่อวันในสัปดาห์หรือเดือนจากวันที่เป็นสตริงในภาษาใดก็ได้

  • เปลี่ยนโลแคลด้วยโมดูลโลแคล
  • กำหนดฟังก์ชันใหม่

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานพื้นฐานของโมดูล datetime และเมธอด strptime() และ strftime() สำหรับการแปลงระหว่างวันที่และเวลา (วันที่ เวลา) และสตริง โปรดดูบทความต่อไปนี้

เปลี่ยนสถานที่ด้วยโมดูลสถานที่

ไลบรารีมาตรฐาน Python มีโมดูลโลแคลเพื่อควบคุมการตั้งค่าโลแคล

ขึ้นอยู่กับสภาพแวดล้อม แต่ในสภาพแวดล้อมตัวอย่าง โดยใช้รหัสการจัดรูปแบบต่อไปนี้ในเมธอด strftime() ชื่อของวันในสัปดาห์และเดือนจะแสดงเป็นภาษาอังกฤษ
%A,%a,%B,%b

ตัวอย่างต่อไปนี้ใช้วัตถุ datetime เพื่อแสดงวันที่และเวลา (วันที่และเวลา) แต่เช่นเดียวกันกับวัตถุวันที่ที่มีเฉพาะข้อมูลวันที่

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 การตั้งค่าหมวดหมู่โลแคลสำหรับการจัดรูปแบบเวลา ถูกตรวจสอบด้วย locale.getlocale() และถูกตั้งค่าเป็น ไม่มี ผลลัพธ์นี้ขึ้นอยู่กับสภาพแวดล้อม

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

LC_TIME เป็นภาษาญี่ปุ่น (UTF-8) ja_JP.UTF-8 ใน locale.setlocale() เพื่อรับชื่อวันและเดือนในภาษาญี่ปุ่น locale.LC_ALL สามารถใช้เพื่อตั้งค่าหมวดหมู่สถานที่ทั้งหมด แต่โปรดทราบว่าสิ่งนี้จะมีผล ตัวอย่างเช่น LC_MONETARY เป็นต้น

โปรดทราบว่าการเปลี่ยนแปลงเหล่านี้จะมีผลในโค้ดนี้เท่านั้น ไม่ได้หมายความว่าตัวแปรสภาพแวดล้อมของระบบจะถูกเขียนใหม่

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

คุณยังสามารถเปลี่ยนการตั้งค่าสถานที่เพื่อใช้สัญลักษณ์ภาษาอื่นๆ เช่น อังกฤษหรือเยอรมัน

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

หากคุณต้องการรับวันในสัปดาห์สำหรับวันที่ที่ระบุจากสตริงวันที่ในภาษาใดๆ คุณสามารถทำได้โดยทำตามขั้นตอนด้านล่าง

  • LC_TIME เป็นค่าของการตั้งค่าภาษาที่ต้องการ (เช่น ja_JP.UTF-8) ใน locale.setlocale()
  • การแปลงสตริงเป็นวัตถุ datetime ด้วย strptime()
  • เรียก strftime() บนวัตถุ datetime ด้วยรหัสการจัดรูปแบบต่อไปนี้:%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)
# 月曜日

กำหนดฟังก์ชันใหม่

ซึ่งสามารถทำได้โดยการกำหนดฟังก์ชันใหม่

เมธอดวันทำงาน () ของออบเจ็กต์ datetime ให้ค่าจำนวนเต็ม 0 สำหรับวันจันทร์และ 6 สำหรับวันอาทิตย์

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

มีวิธีการที่คล้ายกันคือ isoweekday() ซึ่งคืนค่าจำนวนเต็ม 1 สำหรับวันจันทร์และ 7 สำหรับวันอาทิตย์ โปรดทราบว่ามีความแตกต่างที่ลึกซึ้ง

print(dt.isoweekday())
# 1

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

หากเรากำหนดรายชื่อวันในสัปดาห์สำหรับสตริงภาษาแต่ละสตริง และดึงข้อมูลโดยใช้ค่าจำนวนเต็มที่ได้รับจากวิธีวันในสัปดาห์ () เราก็สามารถบรรลุเป้าหมายได้

Copied title and URL