การจัดรูปแบบการแสดงผลวันที่ ในภาษา Python

25 December 2020

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการจัดรูปแบบการแสดงผลวันที่ในภาษา Python เราจะพูดถึงการใช้งานฟังก์ชัน strftime() สำหรับจัดรูปแบบการแสดงผลของวันที่ และฟังก์ชัน strptime() สำหรับสร้างออบเจ็คของวันที่จากรูปแบบที่กำหนด นี่เป็นเนื้อหาในบทนี้

  • การแสดงวันที่ในรูปแบบมาตรฐาน
  • การจัดรูปแบบการแสดงผล
  • ตัวจัดรูปแบบการแสดงผลในภาษา Python
  • การสร้างวันที่จากรูปแบบที่กำหนด

การแสดงวันที่ในรูปแบบมาตฐาน

ในภาษา Python นั้นเราสามารถแปลงออบเจ็คของวันที่เป็น String ได้โดยการเรียกใช้เมธอดบนออบเจ็คของคลาส datetime, date หรือ time นี่เป็นตัวอย่างของโปรแกรมเพื่อแสดงวันที่และเวลาในรูปแบบมาตรฐานในภาษา Python

standard_dateformat.py
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 นี่เป็นตัวอย่าง

dateformat.py
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 ชั่วโมง

usa_dateformat.py
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() ในการสร้างออบเจ็คของวันที่จากค่านำเข้าในรูปแบบนี้ได้ โดยกำหนดรูปแบบของวันที่ให้กับเมธอด นี่เป็นตัวอย่าง

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

บทความนี้เป็นประโยชน์หรือไม่?Yes·No