2016-01-30 36 views
0

我是Salech,我正在學習Python。 Python是我第一個編程語言。這是我第二天跟隨YouTube視頻「從零到英雄」。而我無法解決的第一個問題與時間和日期有關。使減法可取:'datetime.time'和'datetime.datetime'

挑戰:

  • 要求用戶輸入的最後期限爲他們的項目
  • 告訴他們,他們有多少天完成項目
  • 額外的信貸給他們的答案作爲組合周的&天

我提出所有這一切,但我認爲添加額外的功能,該功能需要的時間的輸入(HH:MM:SS),並打印該噸ime減去當前時間。以下是我想做到這一點:

import math 
import datetime 

currentDate = datetime.date.today() 
currentTime = datetime.datetime.now() 

deadLine = input('Hello, enter the deadline date for your project (mm/dd/yyyy)') 
deadLineDate = datetime.datetime.strptime(deadLine, '%m/%d/%Y').date() 

deadLineTime = input('insert time') 
deadTime = datetime.datetime.strptime(deadLineTime, '%H:%M:%S').time() 
print(deadTime) 

daysLeft = deadLineDate - currentDate 
print('%d days left' % daysLeft.days) 


weeksLeft = math.floor(daysLeft.days/7) 
newDaysLeft = daysLeft .days- 7*(math.floor(daysLeft.days/7)) 
print('You have %d weeks' % weeksLeft, ' and %d days left.' % newDaysLeft) 

timeLeft = deadTime - currentTime 
print(timeLeft.hours) 

與輸入2016年2月4日15:00我收到以下錯誤:

Hello, enter the deadline date for your project (mm/dd/yyyy)02/04/2016 
insert time15:00 
15:00:00 
5 days left 
You have 0 weeks and 5 days left. 
Traceback (most recent call last): 
    File "/Users/PYTHON/challenge04.py", line 31, in <module> 
    timeLeft = deadTime - currentTime 
TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.datetime' 
>>> 

編輯:作爲了Jonatan說,測試代碼,而無需任何輸入:

Hello, enter the deadline date for your project (mm/dd/yyyy) 
Traceback (most recent call last): 
    File "/Users/PYTHON/challenge04.py", line 14, in <module> 
    deadLineDate = datetime.datetime.strptime(deadLine, '%m/%d/%Y').date() 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/_strptime.py", line 507, in _strptime_datetime 
    tt, fraction = _strptime(data_string, format) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/_strptime.py", line 344, in _strptime 
    (data_string, format)) 
ValueError: time data '' does not match format '%m/%d/%Y' 

謝謝。

+1

如果用戶不需要輸入,測試代碼會簡單得多! – jonatan

+0

@jonatan,謝謝,好主意! –

回答

2

您需要將combine您的date和您的time轉換爲datetime

deadline = datetime.datetime.combine(deadLineDate, deadlineTime) 
timeLeft = deadline - currentTime 

的原因錯誤是因爲它並沒有真正多大意義,從time減去date。例如什麼是「4PM - 1月29日星期五?」。

相關問題