python mengurai string tanggal dengan hari di luar rentang tanpa kesalahan

Saya ingin mengurai string tanggal dan memanipulasi tahun, bulan, tanggal jika saya mendapatkan '00' untuk bulan atau hari atau dalam kasus di mana saya mendapatkan hari di luar kemungkinan hari pada tahun/bulan itu. Diberikan '00-00-2012' atau '31-02-2020', saya mendapatkan ValueError. Yang saya inginkan adalah menangkap kesalahan dan kemudian mengubah kesalahan pertama menjadi '01-01-2012' dan yang terakhir menjadi '29-02-2020'. Tidak ada hasil di Google sejauh ini.

Klarifikasi: Saya menggunakan coba/kecuali/ValueError... yang saya inginkan adalah mengurai tahun, bulan, hari dan memperbaiki hari atau bulan ketika mereka mengalami ValueError... tanpa harus membuat kode sendiri penguraian dan ekspresi reguler ... yang menggagalkan tujuan penggunaan perpustakaan sejak awal.

# 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 sumber
comment
Apakah ini menjawab pertanyaan Anda? Python 2.7 mencoba dan kecuali ValueError   -  person sushanth    schedule 04.06.2020


Jawaban (1)


Saya tahu Anda tidak ingin menguraikan tanggalnya sendiri, tetapi menurut saya Anda mungkin harus melakukannya. Salah satu pilihannya adalah dengan membagi string yang masuk menjadi komponen tahun, bulan, dan hari dan memeriksanya terhadap nilai yang valid, menyesuaikannya sesuai kebutuhan. Anda kemudian dapat membuat date dari itu dan memanggil strftime untuk mendapatkan string tanggal yang valid:

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'))

Keluaran:

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