(我假设你这样做是为了学习 Python,所以我会指出你代码中的错误)。
>>> years = SecondsSinceEpoch / 31540000
诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺。你不能那样做。有些年份有 31536000 秒,有些年份有 31622400 秒。
>>> if calendar.isleap(yeariterator) == True:
您无需测试真值是否为真。:-) 做:
>>> if calendar.isleap(yeariterator):
反而。
也改变:
>>> yeariterator = 1969
>>> iterator = 0
>>> while yeariterator < yearsfordayfunction:
>>> yeariterator = yeariterator + 1
到:
对于范围内的年迭代器(1970 年,yearsforday 函数):
这也将解决您的错误:您直到 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