2011-10-05 3 views
0

나는 누군가가 10 억 초가되었을 때 알아 내려고하고있다. 사용자는 그들이 태어 났을 때를 입력한다. 그런 다음이 값을 초로 변환 한 다음 10 억 초를 더하고 날짜로 변환합니다. 그러나 특정 날짜를 입력하면 파이썬이 엉망으로 보인다. 이러한 예제는 1993/11/05 00:00:00입니다. 파이썬에서는 사용자가 0 번째 달에 들어올 것이라고 말합니다. 참고/if 또는 else 또는 datetime을 사용할 수 없습니다.간단한 파이썬 날짜 계산에 관해서

Heres는 내 코드 :

YEARSEC=(12*30*24*3600) 
MONTHSEC=(3600*24*30) 
DAYSEC=(24*3600) 
HOURSEC=3600 
MINUTESEC=60 

year=int(input("Please enter the year in which you were born: ")) 
month=int(input("Please enter the month you were born: "))  
day=int(input("Please enter the day you were born: ")) 
hour=int(input("Please enter the hour you were born: ")) 
minute=int(input("Please enter the minute you were born: ")) 
second=int(input("Please enter the second you were born: ")) 

year_calc=(year*YEARSEC) 
month_calc=(month*MONTHSEC) 
day_calc=(day*DAYSEC) 
hour_calc=(hour*HOURSEC) 
minute_calc=(minute*MINUTESEC) 
s=(1000000000+year_calc+month_calc+day_calc+hour_calc+minute_calc+second) 


year_num=int((s/YEARSEC)) 
s=(s-(year_num*YEARSEC)) 


month_num=int((s/MONTHSEC)) 
s=(s-(month_num*MONTHSEC)) 


day_num=int((s/DAYSEC)) 
s=(s-(DAYSEC*day_num)) 

hour_num=int((s/HOURSEC)) 
s=(s-(HOURSEC*hour_num)) 

minute_num=int((s/MINUTESEC)) 
s=(s-(MINUTESEC*minute_num)) 




print("You will turn 1 000 000 000 seconds old on: %04d/%02d/%02d %02d:%02d:%02d" %(year_num,month_num,day_num,hour_num,minute_num,s)) 
+0

이렇게에서 제대로 datetime'이 될 것입니다'없는 원인의 월, 일을 시작 day_nummonth_num 추악한 엉망 ... 왜 당신이 그것을 사용할 수 없다고합니까? –

+1

아마도 그의 숙제 임) – Dan

답변

1

나는 그것을 테스트하지 않은 있지만 모든, 난 당신이 12 월과 일 (30) 을 얻을 수 있다고 생각 당신이해야 플러스 1 1 0이 아닌

print("You will turn 1 000 000 000 seconds old on: %04d/%02d/%02d %02d:%02d:%02d" %(year_num,month_num+1,day_num+1,hour_num,minute_num,s)) 
1

시간 계산이 까다로운 있습니다. 예를 들어, 모든 달에 30 일이있는 것은 아닙니다. 시간, 분 및 초는 0부터 시작하여 번호가 매겨 지지만 일 및 월은 1부터 시작하여 계산에 off-by-one 버그를 생성합니다 (힌트, 월 요청, 하나 빼기, 모든 계산 수행). 하나는 그것을 다시 표시 할 때). 윤년도 계산하지 않습니다.

는 선생님처럼 보이지만 단지, 당신의 궁극적 인 숙제의 답을 확인하는 경우, 기본 제공 도구를 사용하는 것이 최선은 30 일 개월을 가정하는 단계; ^)

>>> import datetime 
>>> birthday = datetime.datetime(1993,11,05,0,0,0) 
>>> billion = birthday + datetime.timedelta(seconds=1000000000) 
>>> billion.ctime() 
'Mon Jul 14 01:46:40 2025' 
+0

실습을하는 가장 좋은 방법은 datetime입니다. 그러나 나는 기울인다. 그리고 예. 30 일의 달을 가정합니다. 하지만 고마워. – user979616

+0

한 장씩 나옵니다. 너 가까이있어 ... –