การจัดรูปแบบการแสดงผลวันที่ ในภาษา 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()
ในการใช้เมธอดเหล่านี้ เราจะต้องกำหนดตัวจัดรูปแบบการแสดงผลด้วยตัวเองและสามารถใช้กับวันที่รูปแบบใดก็ได้