วิธีแปลงสตริงเป็นวันที่และเวลาใน Python

เผยแพร่แล้ว: 2022-12-20

การแปลงจากข้อมูลประเภทหนึ่งเป็นข้อมูลประเภทอื่นเป็นสิ่งสำคัญในภาษาการเขียนโปรแกรมใดๆ ภาษาการเขียนโปรแกรมเกือบทั้งหมดรองรับการแปลงประเภทสำหรับประเภทข้อมูลในตัว

ประเภทข้อมูลที่กำหนดเอง เช่น วันที่และเวลา จำเป็นต้องมีโมดูลเพิ่มเติมสำหรับการแปลง เราต้องการโมดูล โดยเฉพาะอย่าง datetime สำหรับการแปลงวันที่และเวลา เนื่องจากการทำงานของโมดูลเหล่านี้ไม่เคยง่ายสำหรับโปรแกรมเมอร์ โชคดีที่ python มีโมดูลในตัวเพื่อทำงานกับวันที่และเวลา

เราจะเรียนรู้วิธีการแปลง datetime string เป็น datetime object ใน Python โดยใช้โมดูลต่างๆ ก่อนจะพูดถึงเรื่องนั้น มาดูกันว่าทำไมเราต้องแปลงมันตั้งแต่แรก

ทำไมเราต้องแปลง datetime string เป็น datetime object?

เมื่อเราต้องทำงานกับวันที่ มันไม่ง่ายเลยที่จะทำงานหากอยู่ในรูปแบบสตริง การแปลงเป็นรูปแบบวันที่และเวลาทำให้ใช้งานได้ง่ายมาก วันที่ในสตริงก็เหมือนสตริงปกติ จะไม่มีวิธีพิเศษในการทำงานกับวันที่ มันจะมีวิธีสตริงทั่วไปซึ่งเราไม่ต้องการในขณะที่ทำงานกับวันที่

สมมติว่าเราต้องเปรียบเทียบสองวัน หากอยู่ในรูปแบบสตริง เราก็สามารถเปรียบเทียบได้อย่างถูกต้อง หากอยู่ใน datetime แบบวันที่และเวลา เราสามารถใช้ตัวดำเนินการเปรียบเทียบเช่นตัวเลขได้

นี่เป็นเพียงสถานการณ์เดียวที่การแปลงเป็น datetime แบบวันที่และเวลาทำให้สิ่งต่างๆ ง่ายขึ้น มีสถานการณ์มากมาย เช่น การเพิ่มวันที่ การลบ การจัดการเขตเวลา ฯลฯ ซึ่งการแปลง datetime วันที่และ datetime เป็นวัตถุวันที่และเวลาทำให้ชีวิตของเราง่ายขึ้นกว่าที่เคย

จากที่กล่าวมา เรามาดูวิธีต่างๆ ในการแปลง datetime string เป็น datetime object เราจะใช้โมดูล datetime ในตัวและโมดูล dateutil ของบุคคลที่สามเพื่อแปลงสตริง datetime เป็นวัตถุ datetime เริ่มจากโมดูลวันที่และเวลา

โดยใช้วันที่และเวลา

วันที่และเวลาเป็น datetime ในตัวของ Python ซึ่งใช้เพื่อทำงานกับวันที่และเวลา มีคลาสมากมายในโมดูลนี้ที่ช่วยให้เราทำงานกับวันที่และเวลาได้ เราจะใช้คลาส datetime.datetime สำหรับการแปลง

datetime.datetime มีหลายวิธี เราสนใจวิธี strptime ซึ่งจะช่วยเราในการแปลง มาตรวจสอบกัน

datetime.strptime

เมธอด datetime.strptime ใช้ในการแปลง datetime string เป็น datetime object ใช้สองสตริง หนึ่งคือสตริง datetime และอีกอันคือรูปแบบของสตริง datetime นั้น และส่งคืนวัตถุ datetime

มาดูตัวอย่างกัน

 from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))

หากคุณเรียกใช้โค้ดด้านบน คุณจะเห็นผลลัพธ์ต่อไปนี้

 2022-12-19 21:37:56

เราได้นำสตริงวันที่เวลาและแปลงเป็นวัตถุวันที่ datetime โดยใช้ datetime.strptime datetime ตรวจสอบให้แน่ใจว่ารูปแบบที่คุณให้กับเมธอดนั้นตรงกับ datetime วันที่และเวลาทุกประการ หากไม่ตรงกัน คุณอาจได้รับข้อผิดพลาดหรือผลลัพธ์ที่ไม่ถูกต้อง

เราได้ใช้รหัสการจัดรูปแบบสำหรับ datetime แบบวันที่และเวลา คุณสามารถอ้างถึงรหัสรูปแบบทั้งหมดในเอกสาร

เมธอด datetime.strptime คืนค่า datetime ที่สมบูรณ์ หากคุณต้องการแยกวันที่และเวลา เราสามารถใช้เมธอด date time ของ datetime object ได้ มาดูรหัสกัน

 from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" ## getting date separately print("Date:", datetime.strptime(string, formatting).date()) ## getting time separately print("Time:", datetime.strptime(string, formatting).time())

เรียกใช้โค้ดด้านบนและคุณจะเห็นผลลัพธ์ต่อไปนี้

 Date: 2022-12-19 Time: 21:37:56

date และ time ของเมธอดจะส่งคืนวัตถุตามลำดับ พวกเขาจะมีวิธีการตามลำดับวันที่และเวลาอีกครั้ง

เราได้จัดเตรียมสตริงและรูปแบบที่ถูกต้องสำหรับเมธอด datetime.strptime ที่เราได้เห็นด้านบน หากเราไม่ได้ระบุอย่างถูกต้อง เราก็จะได้รับข้อผิดพลาด มาดูวิธีจัดการกับข้อผิดพลาดเหล่านั้นกัน เรียกใช้รหัสต่อไปนี้

 from datetime import datetime string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))

โค้ดด้านบนจะเกิดข้อผิดพลาดเนื่องจากการจัดรูปแบบไม่ตรงกับ datetime วันที่และเวลา ในการจัดการกับข้อผิดพลาดประเภทนี้ เราสามารถใช้คำสั่ง try-except ของ Python มาเพิ่มกันเถอะ

 from datetime import datetime try: string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting)) except ValueError as error: print(error)

ตอนนี้เรียกใช้รหัสอีกครั้ง คุณจะเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้โดยไม่ทำลายรหัส

 time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'

ในทำนองเดียวกัน เราสามารถเพิ่ม try-except สำหรับวิธีการ parser.parse ที่กำลังจะมาถึงได้เช่นกัน ช่วยให้เราหลีกเลี่ยงการทำลายโค้ดระหว่างกลาง สิ่งนี้ไม่เกี่ยวข้องเป็นพิเศษกับบริบทบทช่วยสอนนี้ แต่จะเตือนให้คุณใช้ในโค้ดของคุณ

เพียงเท่านี้สำหรับ datetime วันที่และเวลา ไปที่โมดูลถัดไป dateutil

ใช้ dateutil

dateutil ของโมดูลจัดเตรียมส่วนขยายให้กับโมดูล datetime ทำให้การทำงานกับวันที่และเวลาง่ายขึ้นมากด้วยวิธีการมากมายที่ใช้งานง่าย มาติดตั้งโมดูลด้วยคำสั่งต่อไปนี้

 pip install python-dateutil

วิธีการที่เราสนใจคือ dateutil.parser.parse มาดูวิธีการแปลง datetime string เป็น datetime object กัน

parser.parse

วิธีการ parser.parse จะใช้สตริง datetime และแปลงเป็นรูปแบบวัตถุ datetime ตามลำดับ เราไม่จำเป็นต้องจัดรูปแบบใดๆ สำหรับวิธีนี้ มันจะแปลง datetime วันที่และเวลาให้เป็น datetime วันที่และเวลาโดยอัตโนมัติ มาดูตัวอย่างกัน

 from dateutil import parser string = "19-12-2022 09:37:56 PM" print(parser.parse(string))

หากคุณเรียกใช้โค้ดด้านบน คุณจะเห็นผลลัพธ์ต่อไปนี้

 2022-12-19 21:37:56

สตริงวันที่และเวลาต้องอยู่ในรูปแบบเฉพาะที่ parser.parse datetime จะเกิดข้อผิดพลาดหากรูปแบบ datetime วันที่และเวลาไม่เป็นไปตามรูปแบบที่ต้องการ คุณสามารถตรวจสอบรูปแบบสตริงวันที่และเวลาทั้งหมดที่ยอมรับสำหรับการแปลงอัตโนมัติ

เนื่องจากเมธอด parser.parse ส่งคืนอ็อบเจกต์ datetime เราสามารถเข้าถึงอ็อบเจกต์ date และ time แยกจากกันดังที่เราได้เห็นในโมดูล datetime มาดูรหัสกัน

 from dateutil import parser string = "19-12-2022 09:37:56 PM" print("Date:", parser.parse(string).date()) print("Time:", parser.parse(string).time())

คุณสามารถดูผลลัพธ์ด้านล่างหากคุณรันโค้ดด้านบน

 Date: 2022-12-19 Time: 21:37:56

อย่างที่คุณเห็น dateutil ช่วยให้ทำงานกับวันที่และเวลาได้ง่ายขึ้น คุณสามารถสำรวจโมดูลได้ในเอกสาร

บทสรุป

เราใช้โมดูลในตัวหนึ่งโมดูลและโมดูลของบุคคลที่สามหนึ่งโมดูลเพื่อแปลง datetime วันที่และเวลาเป็นวัตถุ DateTime มีโมดูลในตัวอื่นที่เรียกว่า time ซึ่งเราสามารถแปลงสตริง datetime เป็นวัตถุ DateTime คล้ายกับโมดูล datetime และ dateutil ลองด้วยตัวคุณเอง ไม่ใช่เรื่องยากเพราะคุณได้ทำสิ่งที่คล้ายกันกับโมดูลอื่นแล้ว

อาจมีห้องสมุดมากกว่านี้ที่เราสามารถทำได้ในสิ่งเดียวกัน โมดูลที่เราใช้ในบทช่วยสอนเป็นมาตรฐานและใช้กันอย่างแพร่หลาย คุณสามารถสำรวจเพิ่มเติมเกี่ยวกับโมดูลอื่นๆ และเลือกโมดูลที่ดีที่สุดที่เหมาะกับคุณ

คุณยังสามารถสำรวจวิธีการคำนวณความแตกต่างของเวลาในไพธอน

มีความสุขในการเข้ารหัส