2017-06-30 18 views
2

現在、私はPythonを学習しており、データ検証を学ぶために自分自身で取り組んでいます。私が立ち往生したことの一つは、日付と時刻の検証です。このプログラムは、date_start,time_start,date_endおよびtime_endを含む多くのパラメータを取ります。私はISOフォーマットでそれらを必要としています。その形式になったら、それらが有効であることを確認する必要があります。それは私が立ち往生している場所です。datetime入力値が指定されていない場合

from datetime import datetime 

def validate_date(date_start, time_start, date_end, time_end): 
    full_date_start = date_start + time_start 
    full_date_end = date_end + time_end 

    try: 
     formatted_time_start = datetime.strptime(full_date_start, "%Y-%m-%d%H:%M:%S").isoformat(sep="T", timespec="seconds")  
     formatted_time_end = datetime.strptime(full_date_end, "%Y-%m-%d%H:%M:%S").isoformat(sep="T", timespec="seconds") 
     return True 
    except ValueError: 
     return False 

date_start = "2017-06-29" 
time_start = "16:24:00" 
date_end = "2017-06-" 
time_end = "16:50:30" 

print(validate_date(date_start, time_start, date_end, time_end)) 
print("Date Start: " + date_start + "\nTime Start: " + time_start + "\nDate End: " + date_end + "\nTime End: " + time_end) 

バックこのチェックが失敗している必要があります、または私は一日だったので、それが持っているべきだと考え

2017-06-01T06:50:30 

だった私はdate_endのための日と私が得た出力を除去することにより、コードの一部をテストしていました供給されません。どんな助けもありがたいことです。これを行う簡単な方法があれば、私はそれを取るでしょう。ありがとうございました!

答えて

4

失敗する行が実行される前に、あなたがfull_date_endの値をチェックした場合、あなたはこれを取得:"2017-06-16:50:30"、あなたがこの"%Y-%m-%d%H:%M:%S"のようなルックスを探しているフォーマットので、それが日の値として16の最初の数字をピックアップし、 2番目の桁を時値として返します。

これを避けるには、strptime呼び出しの第2パラメータとして"%Y-%m-%d %H:%M:%S"という形式を使用することをお勧めします。私はそれがあなたの問題を解決を願ってい

full_date_start = date_start + ' ' + time_start 
full_date_end = date_end + ' ' + time_end 

try: 
    formatted_time_start = datetime.strptime(full_date_start, "%Y-%m-%d %H:%M:%S").isoformat(sep="T", timespec="seconds")  
    formatted_time_end = datetime.strptime(full_date_end, "%Y-%m-%d %H:%M:%S").isoformat(sep="T", timespec="seconds") 
    ... 

:あなたはあなたのようにfull_date_startとfull_date_endを定義する行を変更するためしかし、これも必要です。

+0

解決しました。おかげでフェリペ! – spaceghost

+0

まだその日は自動入力されませんか? – Alter

+2

それは以前はやっていなかった、それは '16'が半分に分割されただけで、 '1'は日の部分に行き、 '6'は時間の部分に行きました。空白スペースを追加すると、スペースの前の日とスペースの後の時間を検索する必要があります。 –

関連する問題