2016-07-17 5 views
0

は、私はそれが2つの日付を比較する必要があり、このコード間違い、パイソン

import time 
import datetime 
import os 
import msvcrt as m 

while True: 
    try: 
     os.system("cls") 

     delivery = input("Insert delivery date (dd/mm/aaaa): ") 
     dateDelivery = datetime.datetime.strptime(delivery,  "%d%m%Y").strftime("%d/%m/%Y") 
     dateInput = time.strftime("%d/%m/%Y") 

    except ValueError: 
     print("\nWrong format\n\nTry again") 
     m.getch() 
     continue 

    if dateDelivery <= dateInput: 

     print("\nThe inserted date has already past\n\n", dateDelivery, "\n\nla Actual date: ", dateInput) 
     m.getch() 
     continue 

    else: 
     break    

print("Input date: ", dateInput, "\nDelivery date: ", dateDelivery) 

を書きましたプログラムはそれを示すメッセージを送信します。

プログラムはうまく動作しますが、将来にいくつかの日付を挿入すると、プログラムはそれらを過去の日付として認識します。 12122016で試してみてください。

私はコードでは初心者ですから、これは非常に単純な間違いだと思います。私の英語について

申し訳ありませんが、私はあなたが文字列型に変換2つの日付の間の比較しているので、comparationは辞書であるここにも、すべての

答えて

0

おかげでそれを改善しようとしています。あなたはこのよう日時タイプを使用する必要があります。

dateDelivery = datetime.datetime.strptime(delivery,"%d%m%Y") 
    dateInput = datetime.datetime.now() 

あなたは、変数のタイプ印刷して違いを見ることができます:変更前と後の

print(type(dateDelivery)) 
    print(type(dateInput)) 

を。

+0

ありがとうございました!! :Dこれは私の問題を解決します。私は実際にそれを完全に排除することはできませんが、それは私の研究を維持するために私にいくつかの方向性を与えます。 私は時間についての余分なデータを提供するので、 'datetime.now'を使用しないでください。ちょうど日、月、年が必要です。しかし問題はもはや存在しない。 ありがとうございました – MisterPresident

+0

@MisterPresidentよろしくお願いします。型の概念を理解し、作業しているオブジェクトの型に常に気をつけてください。がんばろう。 –

0

datetime値を取得するたびに、strftime("%d/%m/%Y")を使用して文字列に変換します。したがって、dateDeliverydateInputを比較すると、日時の値ではなく2つのテキストが比較されます。

dd-mm-yyyy形式を使用している場合、テキストの順序は必ずしもdatetimeの順序に対応しているとは限りません(実際には、正確な順序付けを持つyyyy-mm-dd形式を使用できます)。例えば

:日付を比較する前に尋ねるとき

>>> "01/01/2015" <= "01/01/2016" 
True 
>>> "02/01/2015" <= "01/01/2016" # wrong? 
False 

だから、あなたは文字列に変換してはいけません。ユーザーに結果を示すとき

dateDelivery = datetime.datetime.strptime(delivery, "%d%m%Y") 
dateInput = datetime.datetime.now() 

その後、あなたは文字列に変換することができます

humanDateInput = dateInput.strftime("%d/%m/%Y") 
humanDateDelivery = dateDelivery.strftime("%d/%m/%Y") 
print("Input date:", humanDateInput) 
print("Delivery date:", humanDateDelivery) 
+1

本当にありがとうございました。間違いを理解するのに役立ちます。 ありがとう – MisterPresident