Относительно простого вычисления даты Python - PullRequest
0 голосов
/ 05 октября 2011

Я пытаюсь узнать, когда кому-то исполнится 1 миллиард секунд.пользователь вводит, когда они родились.Затем эти значения преобразуются в секунды, а затем я добавляю 1 миллиард секунд и снова конвертирую в дату.Тем не менее, когда я ввожу определенные даты, Python, кажется, портит.Такой пример - 1993/11/05 00:00:00, где python говорит, что пользователь перейдет в 0-й месяц.Примечание: я не могу использовать if / else или datetime.

Вот мой код:

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))

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Хотя я не проверял все это, я думаю, что вы не можете получить декабрь и день 30. Вы должны добавить от 1 до day_num и month_num, чтобы месяц и день начинались с 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 голос
/ 05 октября 2011

Время расчетов сложно. Например, месяцы не имеют 30 дней. Часы, минуты и секунды нумеруются, начиная с 0, а дни и месяцы нумеруются, начиная с 1, создавая ошибочные ошибки в ваших вычислениях (подсказка, спросите месяц, затем вычтите один, выполните все вычисления, затем добавьте один при отображении его снова). Вы не учитываете високосные годы.

Лучше всего использовать встроенные инструменты, хотя бы для проверки вашего возможного ответа на домашнее задание, хотя, похоже, учитель предполагает 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'
...