Saya memiliki metode python yang menerima input tanggal sebagai string .
Bagaimana cara menambahkan validasi untuk memastikan string tanggal yang diteruskan ke metode ada di ffg. format:
'YYYY-MM-DD'
jika tidak, metode harus memunculkan semacam kesalahan
Jawaban:
sumber
The Python
dateutil
perpustakaan ini dirancang untuk ini (dan lebih). Ini akan secara otomatis mengonversikan ini menjadidatetime
objek untuk Anda dan menaikkanValueError
jika tidak.Sebagai contoh:
Ini memunculkan a
ValueError
jika tanggal tidak diformat dengan benar:dateutil
juga sangat berguna jika Anda mulai perlu mem-parsing format lain di masa depan, karena dapat menangani sebagian besar format yang dikenal secara cerdas dan memungkinkan Anda untuk memodifikasi spesifikasi Anda:dateutil
contoh parsing .Ini juga menangani zona waktu jika Anda membutuhkannya.
Pembaruan berdasarkan komentar :
parse
juga menerima argumen kata kuncidayfirst
yang mengontrol apakah hari atau bulan diharapkan didahulukan jika suatu tanggal ambigu. Ini default ke Salah. Misalnyasumber
parse('13/12/2001')
"13 Des" tetapiparse('11/12/2001')
"12 Nov" (hasil pertama akan menyarankan "11 Des" di sini).parse
sebenarnya mengambildayfirst
argumen kata kunci yang memungkinkan Anda untuk mengontrol ini.parse('11/12/2001', dayfirst=True)
akan kembali "11 Des." default dateutil adalahdayfirst=False
datetutil.parser.parse()
menerima terlalu banyak format waktu (Anda bisa menemukan contoh lain dengan input yang ambigu). Jika Anda ingin memvalidasi bahwa input Anda dalam format YYYY-MM-DD makaparse()
fungsinya adalah alat yang salah..parse()
mengembalikan string format selaindatetime
objek?Saya pikir fungsi validasi penuh akan terlihat seperti ini:
Eksekusi secara adil
tidak cukup karena metode strptime tidak memeriksa bahwa bulan dan hari dalam bulan adalah angka desimal nol-empuk. Sebagai contoh
akan dieksekusi tanpa kesalahan.
sumber
datetime.strptime(date_text, "%Y-%m-%d")
?..ini memunculkan
ValueError
jika menerima format yang tidak kompatibel...jika Anda berurusan dengan tanggal dan waktu banyak (dalam arti objek waktu, sebagai lawan dari unix timestamp mengapung), itu ide yang baik untuk melihat ke modul pytz, dan untuk penyimpanan / db, simpan segala sesuatu di UTC .
sumber
Ini cara termudah:
sumber