2014-11-11 3 views
0

내 현재 코드 :입력 날짜가있는 오늘 날짜를 빼는 방법은 무엇입니까?

import datetime 
from time import strptime 
leapyear = 0 

isValid = False 
while not isValid: 
    in_date = input(" Please in put a year in the format dd/mm/yyyy ") 
    try: 
     d = strptime(in_date, '%d/%m/%Y') 
     isValid=True 
    except: 
     print ("This is not in the right format") 

diff = d -datetime.date.today() 
print(in_date) 
print(d) 
print(diff) 

나는 두 날짜 입력 날짜와 서로 오늘 날짜를 뺄 수 없습니다. TypeError: unsupported operand type(s) for -: 'time.struct_time' and 'datetime.date' 예외가 발생합니다.

왜 그런가?

답변

0

모듈 객체는 동일한 라이브러리의 다른 객체와의 빼기 만 지원합니다. time 모듈 struct_time 튜플은 그 중 하나가 아닙니다.

사용 datetime.datetime.strptime() class method 대신 날짜를 구문 분석 :

d = datetime.datetime.strptime(in_date, '%d/%m/%Y') 

다음 결과에서 단지 date 객체를 추출하는 datetime.date() method를 사용

diff = d.date() - datetime.date.today() 

결과가 datetime.timedelta instance이다.

do catch do 모두 예외입니다.

while True: 
    in_date = input(" Please in put a year in the format dd/mm/yyyy ") 
    try: 
     d = datetime.datetime.strptime(in_date, '%d/%m/%Y').date() 
     break 
    except ValueError: 
     print ("This is not in the right format") 

내가 while 루프를 종료하는 대신 플래그 변수를 사용하려면 여기를 break을 사용 : 예상되는 형식과 일치하지 않는 문자열, ValueError을 통과 할 때 단지 사람들은 strptime()에 의해 throw 잡을 수있어.

+0

일을 마친 후 어떻게하면 dd/mm/yyy 형식으로 돌아갈 수 있습니까? – user3077551

+0

@ user3077551 : '월'을 여기에서 차이점으로 정의하십시오. –

+0

@ user3077551 : [년과 월의 두 datetime.date() 날짜의 차이 계산] 참조 (http://stackoverflow.com/q/12564077) –

관련 문제