2017-10-10 10 views
-1

ユーザーは日付を入力しているが、その方法を見つけることができない2つの日付間の日数を計算しようとしています。私は現在、このコードを持っている:ユーザーによって入力された2つの日付の間の残りの日の計算

from datetime import date 

startdate = date(input("When do you intend to start?")) 
enddate = date(input("When is your deadline?")) 
numstudydays = enddate - startdate 
print (numstudydays) 

input()メソッドは、文字列変数として入力を受け付け、Pythonであなたに

+0

現在、このコードがありますか? – SiHa

+0

https://stackoverflow.com/questions/8419564/difference-between-two-dates – Marco

答えて

0

datetimeコンストラクタを正しく使用していません。私はあなたの解決策を単純で管理しやすい方法でユーザーの入力を処理するよう修正しました。基本的なデータ検証がdatetime.strptime factory methodによって行われるが、(終了日は、常に開始日の後に来ることを、例えば、チェックなど)よりがあるかもしれない:

from datetime import datetime, date 

start, end = None, None 

while start is None: 
    rawinput = input("When do you intend to start? ") 

    try: 
     # %Y stands for a fully specified year, such as 2017, 1994, etc. 
     # %m for the integer representation of a month, e.g. 01, 06, 12 
     # and %d for the day of the month 
     # see https://docs.python.org/3/library/time.html#time.strftime for more 
     start = datetime.strptime(rawinput, "%Y %m %d") 
    except ValueError: 
     print("Input must be \"<year number> <month number> <day number>\"") 

while end is None: 
    rawinput = input("When is your deadline? ") 

    try: 
     end = datetime.strptime(rawinput, "%Y %m %d") 
    except ValueError: 
     print("Input must be \"<year number> <month number> <day number>\"") 

diff = end - start 

print("You have %d days of time" % diff.days) 

私はテストのカップルよりも多くをした、と結果は次のようになります。

[email protected]:~$ python3.6 ./test.py 
When do you intend to start? 2017 01 32 
Input must be "<year number> <month number> <day number>" 
When do you intend to start? 2017 01 31 
When is your deadline? 2017 02 30 
Input must be "<year number> <month number> <day number>" 
When is your deadline? 2017 02 28 
You have 28 days of time 
1

ありがとうございます。次に、int()メソッドを使用して整数に型キャストできます。しかし、タプル全体を型キャストすることはできません。あなたのケースでは、(年、月、日)です。 すべての値を1つずつ取得することで実行できます。

from datetime import date 

print("Enter intended start date details: ") 
year = int(input('Year: ')) 
month = int(input('Month: ')) 
day = int(input('Day: ')) 
startdate = date(year, month, day) 

print("Enter intended enddate details: ") 
year = int(input('Year: ')) 
month = int(input('Month: ')) 
day = int(input('Day: ')) 
enddate = date(year, month, day) 
numstudydays = enddate - startdate 

print (numstudydays) 

希望します。

+0

この回答は本質的に間違っているわけではありませんが、たとえば、その月の日数が範囲外であることを確認することでデータの検証は行われません。 [datetime](https://docs.python.org/release/3.6.2/library/datetime.html#strftime-and-strptime-behavior)モジュールでは、それを達成するためのより標準的で実績のある方法が記載されています。 – none

0

あなたの最大の問題は、日付の取得方法です。 date()関数には3つの整数が必要です。日付(2017,10,10)

あなたが入力を使用する()あなたは文字列を取得:

input() #returns a string 

あなたはまた、何らかの形で入力を分割することにより、この問題を解決する必要があるでしょう:

例えば

date(*[int(i) for i in input("When is your deadline?").split("-")]) 

しかし、あなたが本当にこのケースで欲しいのstrptimeを使用することです:あなたがこれを行う場合は、日付を得ることを意味

"2017-10-12".split("-") # returns ["2017","10","12"] 
[int(i) for i in "2017-10-12".split("-")] # returns [2017,10,12] 

。 strptime()は、それがどのように見えるかを定義することにより、日時に文字列を変換します。完全なスクリプトの

from datetime import datetime 
datetime.strptime("20171012","%Y%m%d").date() # returns: datetime.date(2017, 10, 12) 

from datetime import datetime 

startdate_str = input("When do you intend to start? e.g.(2017-10-10)") 
enddate_str = input("When is your deadline? e.g.(2017-10-11)") 

startdate_dt = datetime.strptime(startdate_str,"%Y-%m-%d").date() 
enddate_dt = datetime.strptime(enddate_str,"%Y-%m-%d").date() 

numstudydays = enddate_dt - startdate_dt 

print (numstudydays.days) # prints 1 for example inputs 

推奨リンク

の様々な種類文字列をフォーマットする方法: https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior

関連する問題