2017-10-10 127 views
-1

我想要計算用戶輸入日期但不能找到如何去做的兩個日期之間的天數。目前,我有這樣的代碼:計算用戶輸入的兩個日期之間的剩餘天數

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) 

謝謝

+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

在Python中,input()方法接受輸入作爲一個字符串變量。然後,您可以使用int()方法將其轉換爲整數。但是你不能綁定整個元組。即(年,月,日)。 您可以通過逐個獲取所有值來完成。

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

這個答案本質上並不是錯誤的,但它不會通過檢查月份日期超出範圍來執行數據驗證,例如。 [日期時間](https://docs.python.org/release/3.6.2/library/datetime.html#strftime-and-strptime-behavior)模塊記錄了更多標準和可靠的實現方式。 – none

0

我認爲你最大的問題是你如何檢索日期。 date()函數需要三個整數,例如日期(2017,10,10)

當您使用的輸入(),你得到一個字符串:

input() #returns a string 

您還需要通過某種方式拆分輸入來解決這個:

例如

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

這意味着,如果你這樣做,你會得到一個日期:

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

但你真的想在這種情況下,什麼是使用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 

推薦鏈接

的各種樣的:Strptime()定義它的外觀一個字符串轉換爲datetime格式化字符串的方法: https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior