2017-09-13 18 views
2

私は日付入力を再フォーマットしていますが、その一部はtry/except関数を使用して無効な入力を取り除いています。そのためには、有効な日付であるかどうかの条件を設定する必要があります。たとえば、2017にうるう年がないため、'29 -02-2017 'の入力は無効になります。もう1つの例は'31/09/2010 'です.9月には31日目がないためです。さらに、 '131/09/2020'はその日の数字のため無効です。あなたは私のドリフトをキャッチします。有効な日付の条件を設定するにはどうすればよいですか?

同僚は、今年の毎月の条件について精巧なリストを作成したと述べましたが、このプロセスを簡略化する方法があるかどうかは疑問です。

+0

ここでは、テキストボックスから取得したデータから月/日を解析するために書いたいくつかのプロダクションコードのサンプルを紹介します。このアプリケーションは決して年を気にしないので、それを解析するように '2000'のダミー値に設定します。 https://gist.github.com/anonymous/98efe5bb46c4a790c3b8d51e2a594132 –

+0

@AdamSmith私はそれを感謝します! –

+0

@hamsterbyte問題ありません。 N.B.この関数は、失敗した日付のバブルを次のコード層に渡すように設計されています。つまり、 'make_date'が日付文字列のソースもUIを話す責任も持たないので、呼び出しコードは失敗した日付を処理する必要があります。 –

答えて

0

あなたはまた、日付の形式を検証したい場合(すなわち、それは、そのような01/02/99など、すべて単一のフォーマットであることを確認)、あなたが

from datetime import datetime 
datetime_object = datetime.strptime(your_date_string_here, '%d/%m/%Y') 

を使用することができますこれがあればdatetimeオブジェクトを返します。日付は有効です。それ以外の場合は失敗します。

>>> datetime_object = datetime.strptime('29/02/2017', '%d/%m/%Y') 
ValueError: day is out of range for month 

また、異なるフォーマットでも失敗します。

>>> datetime_object = datetime.strptime('29-02-2017', '%d/%m/%Y') 
Traceback (most recent call last): 
ValueError: time data '29-02-2017' does not match format '%d/%m/%Y' 

あなたが複数のフォーマットを扱うことができるようにしたい場合は、ほとんどの日付形式を解析することができますdateutilパッケージ、見てみましょう。

from dateutil import parser 
dt = parser.parse(your_date_string_here) 

これは無効な日付のエラーをスローしますが、異なるフォーマットを処理します。

関連する問題