เมื่อใช้ไลบรารี datetime มาตรฐานของ Python คุณสามารถสร้างอ็อบเจ็กต์ datetime จากสตริงวันที่และรับชื่อของวันในสัปดาห์หรือเดือนจากมันเป็นสตริง อย่างไรก็ตาม ภาษาของสตริงเหล่านั้นขึ้นอยู่กับสถานที่ (การตั้งค่าประเทศหรือภูมิภาค) ของสภาพแวดล้อม
มีสองวิธีในการรับชื่อวันในสัปดาห์หรือเดือนจากวันที่เป็นสตริงในภาษาใดก็ได้
- เปลี่ยนโลแคลด้วยโมดูลโลแคล
- กำหนดฟังก์ชันใหม่
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานพื้นฐานของโมดูล datetime และเมธอด strptime() และ strftime() สำหรับการแปลงระหว่างวันที่และเวลา (วันที่ เวลา) และสตริง โปรดดูบทความต่อไปนี้
- บทความที่เกี่ยวข้อง:การแปลงวันที่และเวลาเป็นและจากสตริงด้วย datetime . ของ Python(
strftime
,strptime
)
เปลี่ยนสถานที่ด้วยโมดูลสถานที่
ไลบรารีมาตรฐาน 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'>
หากเรากำหนดรายชื่อวันในสัปดาห์สำหรับสตริงภาษาแต่ละสตริง และดึงข้อมูลโดยใช้ค่าจำนวนเต็มที่ได้รับจากวิธีวันในสัปดาห์ () เราก็สามารถบรรลุเป้าหมายได้