python แยกสตริงวันที่โดยไม่มีวันที่อยู่นอกช่วงโดยไม่มีข้อผิดพลาด

ฉันต้องการแยกสตริงวันที่และจัดการปี, เดือน, วันที่ในกรณีที่ฉันได้รับ '00' สำหรับเดือนหรือวัน หรือในกรณีที่ฉันได้รับวันนอกเหนือจากวันที่เป็นไปได้ของปี/เดือนนั้น เมื่อระบุ '2012-00-00' หรือ '2020-02-31' ฉันได้รับ ValueError สิ่งที่ฉันต้องการคือจับข้อผิดพลาดแล้วเปลี่ยนอันแรกเป็น '2012-01-01' และอันหลังเป็น '2020-02-29' ยังไม่มีผลการค้นหาบน Google

ชี้แจง: ฉันใช้ try/ยกเว้น/ValueError... สิ่งที่ฉันต้องการคือแยกวิเคราะห์ปี เดือน วัน และแก้ไขวันหรือเดือนเมื่อมี ValueError... โดยไม่ต้องเขียนโค้ดการแยกวิเคราะห์และนิพจน์ทั่วไปด้วยตนเอง ... ซึ่งขัดต่อจุดประสงค์ในการใช้ห้องสมุดตั้งแต่แรก

# Try dateutjil
blah = dateutil.parser.parse(date_string, fuzzy=True)
print(blah)

# Try datetime
date_object = datetime.strptime(date_string, date_format)
return_date_string = date_object.date().strftime('%Y-%m-%d')

person DizzyDawg    schedule 04.06.2020    source แหล่งที่มา
comment
สิ่งนี้ตอบคำถามของคุณหรือไม่? Python 2.7 ลองและยกเว้น ValueError   -  person sushanth    schedule 04.06.2020


คำตอบ (1)


ฉันรู้ว่าคุณไม่ต้องการแยกวันที่ด้วยตัวเอง แต่ฉันคิดว่าคุณอาจจะต้องทำ ทางเลือกหนึ่งคือการแบ่งสตริงขาเข้าออกเป็นส่วนปี เดือน และวันของส่วนประกอบ และตรวจสอบเทียบกับค่าที่ถูกต้อง โดยปรับเปลี่ยนตามต้องการ จากนั้นคุณสามารถสร้าง date จากนั้นโทร strftime เพื่อรับสตริงวันที่ที่ถูกต้อง:

from datetime import datetime, date
import calendar

def parse_date(dt):
    [y, m, d] = map(int, dt.split('-'))
    # optional error checking on y
    # ...
    # check month
    m = 1 if m == 0 else 12 if m > 12 else m
    # check day
    last = calendar.monthrange(y, m)[-1]
    d = 1 if d == 0 else last if d > last else d
    return date(y, m, d).strftime('%Y-%m-%d')


print(parse_date('2012-00-00'))
print(parse_date('2020-02-31'))

เอาท์พุท:

2012-01-01
2020-02-29
person Nick    schedule 05.06.2020