การจัดรูปแบบการแสดงผลวันที่ ในภาษา Python
ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการจัดรูปแบบการแสดงผลวันที่ในภาษา Python เราจะพูดถึงการใช้งานฟังก์ชัน strftime() สำหรับจัดรูปแบบการแสดงผลของวันที่ และฟังก์ชัน strptime() สำหรับสร้างออบเจ็คของวันที่จากรูปแบบที่กำหนด นี่เป็นเนื้อหาในบทนี้
- การแสดงวันที่ในรูปแบบมาตรฐาน
- การจัดรูปแบบการแสดงผล
- ตัวจัดรูปแบบการแสดงผลในภาษา Python
- การสร้างวันที่จากรูปแบบที่กำหนด
การแสดงวันที่ในรูปแบบมาตฐาน
ในภาษา Python นั้นเราสามารถแปลงออบเจ็คของวันที่เป็น String ได้โดยการเรียกใช้เมธอดบนออบเจ็คของคลาส datetime, date หรือ time นี่เป็นตัวอย่างของโปรแกรมเพื่อแสดงวันที่และเวลาในรูปแบบมาตรฐานในภาษา Python
from datetime import datetime
date = datetime(2020, 3, 11, 5, 28, 0)
print(date.isoformat())
print(date.ctime())
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
2020-03-11T05:28:00
Wed Mar 11 05:28:00 2020
ในภาษา Python นั้นมีเมธอดที่เราสามารถใช้สำหรับจัดรูปแบบของวันที่ให้อยู่ในรูปแบบมาตรฐาน และในตัวอย่างนี้เป็นการแสดงการใช้งานสองเมธอด เมธอด isoformat() สำหรับแปลงวันที่เป็น String ในรูปแบบวันที่มาตรฐาน ISO และเมธอด ctime() สำหรับแปลงเป็น String ในรูปแบบวันที่มาตรฐานในภาษา C
ซึ่งวันที่สองรูปแบบนี้เป็นรูปแบบมาตรฐานที่ระบบของคอมพิวเตอร์ส่วนใหญ่ใช้ อย่างไรก็ตาม มันอาจไม่เพียงพอในการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไป ยกตัวอย่างเช่น เราอาจต้องการแสดงผลวันที่ในรูปแบบที่แตกต่างออกไปจากนี้ ยกตัวอย่างเช่นในรูปแบบนี้
11/03/20 05:28
ในรูปแบบของวันที่ด้านบน สังเกตว่าเราต้องการใช้เครื่องหมาย / คั่นระหว่างวันที่ และสำหรับเวลาเราต้องการแสดงเพียงชั่วโมงและนาทีเท่านั้น เพื่อทำเช่นนี้เราจะต้องใช้เมธอด strftime() ในการกำหนดรูปแบบการแสดงผลแทน
การจัดรูปแบบการแสดงผล
ในตอนนี้คุณได้ทราบแล้วว่าเราสามารถจัดรูปแบบของวันที่ในรูปแบบที่ต้องการได้ด้วยเมธอด strftime() ซึ่งเมธอดนี้เป็นเมธอดจากคลาส datetime, date และ time นี่เป็นรูปแบบการใช้งานของเมธอด strftime() เพื่อจัดรูปแบบการแสดงผลของวันที่ในภาษา Python
object.strftime(format_string)
โดยที่ object เป็นออบเจ็คของวันที่หรือเวลาจากคลาส datetime, date หรือ time จากนั้นเราสามารถเรียกใช้งานเมธอด strftime() บนออบเจ็คดังกล่าว เพื่อจัดรูปแบบของวันที่ในรูปแบบที่ต้องการผ่านทางพารามิเตอร์ format_string ได้
พารามิเตอร์ format_string นั้นเป็น String ที่ประกอบไปด้วยตัวจัดรูปแบบการแสดงผล (Format code) มาตรฐานที่มาจากภาษา C เราจะให้คุณได้เห็นตัวจัดรูปแบบการแสดงผลทั้งหมดที่ใช้ได้ในอีกไม่ช้านี้
ตอนนี้เรามาดูการใช้งานเมธอด strftime() ในการจัดรูปแบบการแสดงผลวันที่ให้อยู่ในรูปแบบจากในตัวอย่างก่อนหน้านี้ 11/03/20 05:28 นี่เป็นตัวอย่าง
from datetime import datetime
date = datetime(2020, 3, 11, 5, 28, 0)
print(date.strftime("%d/%m/%y %H:%M"))
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
11/03/20 05:28
ในตัวอย่าง เป็นการจัดรูปแบบการแสดงผลของวันที่ด้วยเมธอด strftime() โดยแสดงวันที่ในรูปแบบของวันเดือนปี และในส่วนของเวลาแสดงเพียงชั่วโมงและนาที
"%d/%m/%y %H:%M"
ค่าของ Format string ที่ส่งเป็นพารามิเตอร์ของเมธอดนั้นเป็นรูปแบบของวันที่ที่เราต้องการแปลง โดยภายใน String นี้จะประกอบไปด้วยตัวจัดรูปแบบการแสดงผลแบบต่างๆ ที่ขึ้นต้นด้วย % ตามด้วยตัวอักษรที่ระบุการทำงานซึ่งมีความหมายดังนี้
%dเป็นค่าของวันที่ในรูปแบบ 01 - 31%mเป็นค่าของเดือนในรูปแบบ 01 - 12%yเป็นค่าของปีในรูปแบบ 00 - 99%Hเป็นค่าของชั่วโมงเป็นในรูปแบบ 24 ชั่วโมง%Mเป็นค่าของนาทีจาก 00 - 59
สำหรับค่าอื่นที่ไม่ใช่ตัวจัดรูปแบบการแสดงผลของวันที่จะถูกแปลงเป็น String literal เหมือนกับที่มันเป็น เช่น / หรือ : ที่ปรากฏใน String นี่จะทำให้เราสามารถกำหนดตัวอักษรอื่นๆ แทรกไปใน String ของวันที่ได้
นี่เป็นอีกตัวอย่างในการจัดรูปแบบการแสดงผลของวันที่ที่ใช้ในประเทศสหรัฐอเมริกา โดยวันที่จะแสดงในรูปแบบของเดือน วัน ปี และเวลาในรูปแบบ 12 ชั่วโมง
from datetime import datetime
date = datetime(2020, 3, 11, 5, 28, 0)
print(date.strftime("%B %d, %Y, %I:%M %p"))
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
March 11, 2020, 05:28 AM
ในตัวอย่างนี้ เป็นการใช้เมธอดจัดรูปแบบการแสดงผลของวันที่ที่แสดงในประเทศสหรัฐอเมริกา จะเห็นว่าแทนที่เราจะแสดงเดือนเป็นตัวเลข เราสามารถแสดงเดือนเป็นตัวหนังสือได้โดยการใช้ตัวจัดรูปแบบการแสดงผล %B
"%B %d, %Y, %I:%M %p"
และเช่นเดียวกันเพื่อแสดงปีเป็นแบบสี่ตัวเลข เราสามารถใช้ %Y แทน %y ก่อนหน้านี้ที่แสดงปีเพียงสองตัวเลขได้ เราแสดงเวลาในรูปแบบสิบสองชั่วโมงโดยการใช้ %I สำหรับค่าของชั่วโมง และ %p เพื่อแสดงเวลาในรูปแบ AM หรือ PM
ในตอนนี้ คุณทราบแล้วว่าเราสามารถใช้เมธอด strftime() ในการแปลงวันที่ในรูปแบบที่ต้องการได้ เพียงแค่เลือกตัวจัดรูปแบบการแสดงผลและจัดเรียงมันในแบบที่ต้องการ
นอกจากนี้ เรายังสามารถใส่ตัวอักษรใน Format string ได้เช่นในตัวอย่างก่อนหน้า เราใช้เครื่องหมายคอมมา (,) เพื่อคั่นในส่วนของวันที่และเวลา ซึ่งค่าเหล่านี้จะไม่ถูกจัดรูปแบบการแสดงผลและถูกมองเป็น String literal เพราะมันไม่ใช่ตัวจัดรูปแบบที่ขึ้นต้นด้วยเครื่องหมาย %
ตัวจัดรูปแบบการแสดงผลในภาษา Python
สำหรับตัวจัดรูปแบบการแสดงผลของวันที่และเวลาทั้งหมดที่สามารถใช้ได้ในภาษา Python นั้นสามารถแสดงได้ดังตารางต่อไปนี้ ตัวจัดรูปแบบการแสดงผลเหล่านี้สามารถใช้ร่วมกับเมธอด strftime() สำหรับจัดรูปแบบการแสดงผลของวันที่ และเมธอด strptime() สำหรับสร้างออบเจ็คของวันที่จากรูปแบบที่กำหนด
| คำสั่ง | ความหมาย | ตัวอย่าง |
|---|---|---|
| %a | ชื่อย่อของวันในสัปดาห์ | Sun - Sat |
| %A | ชื่อของวันในสัปดาห์ | Sunday - Saturday |
| %w | หมายเลขของวันในสัปดาห์ โดยที่ 0 คือวันอาทิตย์ และ 6 คือวันเสาร์ | 0 - 6 |
| %d | วันของเดือนโดยมี 0 นำหน้า | 00 - 31 |
| %b | ชื่อของเดือนแบบย่อ | Jan - Dec |
| %B | ชื่อของเดือนแบบเต็ม | January - December |
| %m | เดือนของปีโดยมี 0 นำหน้า | 01 - 12 |
| %y | ปีในรูปแบบสองตัวเลข | 00 - 99 |
| %Y | ปีในรูปแบบสี่ตัวเลข | 0000 - 9999 |
| %H | ชั่วโมงในรูปแบบ 24 ชั่วโมง | 00 - 23 |
| %I | ชั่วโมงในรูปแบบ 12 ชั่วโมง | 01 - 12 |
| %p | ตัวบอกเวลาก่อนและหลังเทีี่ยง | AM, PM |
| %M | นาทีในรูปแบบสองตัวเลข | 00 - 59 |
| %S | วินาทีในรูปแบบสองตัวเลข | 00 - 59 |
| %f | ไมโครวินาทีในรูปแบบหกตัวเลข | 000000 - 999999 |
| %z | เขตเวลา UTC ในรูปแบบ +HHMM[SS.ffffff] | เช่น +0000, +0430, +0700, -1100 |
| %Z | ชื่อเขตเวลา | UTC, GMT, PST |
| %j | วันของปีมี 0 นำหน้า | 001 - 366 |
| %U | สัปดาห์ของปีมี 0 นำหน้า โดยมีวันอาทิตย์เป็นวันแรกของสัปดาห์ | 00 - 53 |
| %W | สัปดาห์ของปีมี 0 นำหน้า โดยมีวันจันทร์เป็นวันแรกของสัปดาห์ | 00 - 53 |
| %c | รูปแบบของวันที่และเวลาในท้องถิ่นปัจจุบัน | Tue Aug 16 21:30:00 1988 |
| %x | รูปแบบของวันที่ในท้องถิ่นปัจจุบัน | 08/16/1988 |
| %X | รูปแบบของเวลาในท้องถิ่นปัจจุบัน | 21:30:00 |
| %% | ใช้สำหรับแสดงตัวอักษร % | % |
และนี่ก็เป็นตัวจัดรูปแบบการแสดงผลทั้งหมดที่สามารถใช้ได้ในภาษา Python สำหรับการแสดงค่า % ในวันที่ เราจะต้องใช้ %% เนื่องจาก % เพียงอย่างเดียวนั้นใช้สำหรับกำหนดตัวจัดรูปแบบการแสดงผลไปแล้ว
สำหรับตัวอักษรอื่นที่ไม่ได้ปรากฏในตารางจะไม่มีการแปลงเกิดขึ้นและถูกมองเป็น String literal นี่จะทำให้เราสามารถใส่ตัวอักษรแทรกเข้าไปพร้อมกันกับตัวจัดรูปแบบการแสดงผลได้ ยกตัวอย่าง "%d/%m/%y" ตัวอักษร / จะถูกเพิกเฉยจากตัวแปลงการแสดงผล
การสร้างวันที่จากรูปแบบที่กำหนด
นอกจากการจัดรูปแบบการแสดงผลของวันที่และเวลาในรูปแบบที่กำหนดโดยการจัดใช้เมธอด strftime() แล้ว เรายังสามารถใช้ตัวจัดรูปแบบการแสดงผลเหล่านี้เพื่อสร้างออบเจ็คของวันที่จากรูปแบบที่กำหนดได้ แต่จะใช้มันร่วมกับเมธอด strptime() แทน
จากความรู้เดิมที่เรามี คุณทราบว่าเราสามารถสร้างออบเจ็คของวันที่จาก String ด้วยการใช้เมธอด fromisoformat() ดังนี้
date = datetime.fromisoformat("2020-03-11T05:28:00")
ในตัวอย่างนี้ เราได้สร้างออบเจ็คของวันที่ในรูปแบบ ISO string ด้วยเมธอด fromisoformat() และอย่างที่คุณเห็นเมธอดนี้ทำงานได้ดีกับรูปแบบของวันที่ดังกล่าว แต่ในบางครั้ง เราอาจมีวันที่ในรูปแบบอื่นๆ ที่แตกต่างจากนี้ ยกตัวอย่างเช่น
"11/03/2020 05.28.00"
วันที่อยู่ในรูปแบบ วัน เดือน ปี โดยคั่นส่วนของวันที่ด้วย (/) และแต่ละส่วนของเวลานั้นคั่นด้วยเครื่องหมายจุด (.) เมื่อค่านำเข้าเป็นเช่นนี้ เราไม่สามารถใช้เมธอด fromisoformat() ในการสร้างออบเจ็คของวันที่ได้ เนื่องจากนี่ไม่ใช้วันที่ในรูปแบบมาตรฐานและ Python ไม่เข้าใจวันที่ในรูปแบบดังกล่าว
แต่โชคดีที่เราสามารถใช้เมธอด strptime() ในการสร้างออบเจ็คของวันที่จากค่านำเข้าในรูปแบบนี้ได้ โดยกำหนดรูปแบบของวันที่ให้กับเมธอด นี่เป็นตัวอย่าง
from datetime import datetime
date = datetime.strptime("11/03/2020 05.28.00", "%d/%m/%Y %H.%M.%S")
print(date)
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
2020-03-11 05:28:00
ในตัวอย่างนี้ เป็นการใช้เมธอด strptime() ในการสร้างออบเจ็คของวันที่จากรูปแบบที่กำหนด เมธอดนี้เป็นคลาสเมธอด ดังนั้นเราสามารถเรียกใช้มันได้โดยตรงจากคลาส datetime
date = datetime.strptime("11/03/2020 05.28.00", "%d/%m/%Y %H.%M.%S")
สิ่งที่เราต้องทำคือตรวจสอบรูปแบบวันที่ที่มี และกำหนดรูปแบบของวันที่ในพารามิเตอร์ที่สองของเมธอดให้สอดคล้องกัน ในตัวอย่าง เราทราบว่าวันที่นั้นอยู่ในรูปแบบของ วัน/เดือน/ปี ดังนั้นในส่วนของวันที่สามารถกำหนดรูปแบบได้เป็น "%d/%m/%Y"
เช่นเดียวกันในส่วนของเวลานั้นอยู่ในรูปแบบ ชั่วโมง.นาที.วินาที ดังนั้นในส่วนนี้สามารถกำหนดรูปแบบได้เป็น "%H.%M.%S" สังเกตว่าระหว่างวันที่และเวลานั้นมีเว้นวรรคคั่นอยู่ด้วย ดังนั้นคุณต้องไม่ลืมที่จะใส่มันใน String จัดรูปแบบด้วย
ในตอนนี้เมธอด datetime.strptime() สามารถเข้าใจว่าค่านำเข้าของเรามีรูปแบบเป็นอย่างไร นั่นทำให้มันสามารถอ่านวันที่ในรูปแบบดังกล่าวและนำมาสร้างเป็นออบเจ็คของวันที่ได้อย่างถูกต้อง และเราสามารถใช้ date ได้เหมือนกับออบเจ็คของวันที่ปกติ
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับการจัดรูปแบบการแสดงผลของวันในภาษา Python โดยการใช้เมธอด strftime() และสร้างออบเจ็คของวันที่จากรูปแบบที่กำหนดด้วยเมธอด strptime() ในการใช้เมธอดเหล่านี้ เราจะต้องกำหนดตัวจัดรูปแบบการแสดงผลด้วยตัวเองและสามารถใช้กับวันที่รูปแบบใดก็ได้