如何在 python 中处理模中的 0

How to deal with 0 in modulo in python

我想创建代码,根据经过的小时数告诉我现在是什么日期。

我不想导入任何库我只想自己计算。我希望代码能够灵活处理任何 snodiy(一年中的简单天数)、nohiod(一天中的小时数)和我给它的月数。只有绝对是小时,它总是相同的并且有 60 分钟。

下面的代码工作得很好,但问题是我有 13 (0-12) 而不是 12 个月,我不知道如何以最有效的方式处理 0。下面的例子。我有 0 天 0 个月和正确年份(2016 年)的小时数。

dev = True

# simple number of days in year
snodiy = 365.25
# number of hours in one day
nohiod = 24

# total hours passed
# 17672256 current year
thp = 17672257
dayc = 30  # number of days in a month #


# get date
def gd():
    year = (thp / snodiy) / nohiod
    rest = thp % (snodiy * nohiod)
    if dev:
        print("dev year rest:", rest)
    month = rest / (dayc * nohiod)
    rest %= (dayc * nohiod)
    if dev:
        print("dev month rest:", rest)
    day = rest / nohiod
    rest %= nohiod
    if dev:
        print("dev hour rest:", rest)
    hour = rest
    if dev:
        print("Year:", "%d" % year)
        print("Month:", "%d" % month)
        print("Day:", "%d" % day)
        print("Hour:", "%d" % hour)
    print("Hour:", "%d" % hour, "of", "%d" % day, "%d" % month, "%d" % year)

gd()

我假设我们不受现实世界时间问题的所有约束,例如闰年、闰秒、DST 等。如果是,那么您正在在一项极其重要的任务上,正如其他人所提到的,您最好将其留给图书馆。继续...

问题的本质是你隐含地假设一年恰好是 12 个月。您将一年定义为 365.25 * 24 = 8766 小时。您将一个月定义为 30 * 24 = 720 小时。 12 个月将是 720 * 12 = 8640 小时。您的一年超过 12 个月,因此您在计算中得到第 13 个月也就不足为奇了。

你太紧张了。您需要做以下三件事之一:

  • dayc = snodiy / 12
  • snodiy = dayc * 12
  • 接受(并能够处理)一年中并非恰好有 12 个月的事实。