(я предполагаю, что вы делаете это для изучения Python, поэтому я укажу на ошибки в вашем коде).
>>> years = SecondsSinceEpoch / 31540000
Nonononono. Вы не можете сделать это. Некоторые годы имеют 31536000 секунд, другие - 31622400 секунд.
>>> if calendar.isleap(yeariterator) == True:
Вам не нужно проверять, является ли истинное значение истинным. :-) Делать:
>>> if calendar.isleap(yeariterator):
Вместо.
Также изменить:
>>> yeariterator = 1969
>>> iterator = 0
>>> while yeariterator < yearsfordayfunction:
>>> yeariterator = yeariterator + 1
Кому:
для годового итератора в диапазоне (1970, лет для дневной функции):
Это также исправит вашу ошибку: вы не остановитесь до ПОСЛЕ 2009 г., поэтому вы получите ответ -105, потому что в году осталось 105 дней.
А также нет особого смысла в расчете месяц за месяцем. Год за годом отлично работает.
for yeariterator in range(1970, yearsfordayfunction):
if calendar.isleap(yeariterator) == True:
days = days - 366
else:
days = days - 365
И отступ в 8 пробелов много. 4 чаще встречается.
Кроме того, я бы вычислял год и день года в одном методе вместо того, чтобы делать это дважды.
def YearDay():
SecondsSinceEpoch = int(time.time())
days = SecondsSinceEpoch // 86400 # Double slash means floored int.
year = 1970
while True:
if calendar.isleap(year):
days -= 366
else:
days -= 365
year += 1
if calendar.isleap(year):
if days <= 366:
return year, days
else:
if days <= 365:
return year, days
def MonthDay(year, day):
if calendar.isleap(year):
monthstarts = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]
else:
monthstarts = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
month = 0
for start in monthstarts:
if start > day:
return month, day - monthstarts[month-1] + 1
month += 1