python error การแปลงค่าวัน-เวลาด้วย datetime.strptime()

ในบางครั้งที่เราต้องการแปลง datetime string ด้วย ISO-8601 format (เช่น 2019-08-17T00:17+0700) ด้วยฟังก์ชัน datetime.strptime() เราจะได้ error บ่นมาประมาณว่า

'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S.%f%z'

ทั้งนี้ทั้งนั้น ให้ลองสังเกตดีๆ จะพบว่า มีความแตกต่างเล็กๆ น้อยๆ ในการใส่ค่า เช่น 0700 มีการใส่เป็น 07:00 แทน เป็นสาเหตุทำให้เกิด error ขึ้น

เนื่องจากตัวฟังก์ชันนี้ไม่ยืดหยุ่นพอในการจัดการกับความแตกต่างของ format ทางแก้ง่ายๆ (หากคุณใช้ django) คือเรียกใช้ library ตัวนี้แทน

from django.utils.dateparse import parse_datetime
parse_datetime('2019-08-17T00:17+07:00')

Reference: https://stackoverflow.com/questions/20194496/iso-to-datetime-object-z-is-a-bad-directive

Leave a Reply

Your email address will not be published. Required fields are marked *