可以在此处访问练习的链接-Section 5.14 Exercise #1
引用问题:
锻炼1
...编写一个脚本,该脚本读取当前时间并将其转换为以小时,分钟和秒为单位的一天中的时间,再加上自该纪元以来的天数。
此处提供了可能的解决方案-Solution
上面提供的解决方案似乎很容易理解,但是我对将纪元时间转换为一天中的正常时间的计算/公式感到困惑。这些行最让我感到困惑:
hours = (epoch % seconds_in_a_day) // seconds_in_an_hour + 8
minutes = (epoch % seconds_in_a_day) % seconds_in_an_hour // seconds_in_a_minute
seconds = (epoch % seconds_in_a_day) % seconds_in_an_hour % seconds_in_a_minute
我的问题是,为什么将seconds_in_a_day
除以epoch
的余数除以seconds_in_an_hour
,然后将8加到结果中。我对minutes
和seconds
变量也有类似的困惑。我试图理解这种计算背后的逻辑,但这很令人困惑。
答案 0 :(得分:2)
由于从1970到现在总共是秒,所以我们只想观察今天经过的秒数。这给出了每个公式的第一部分(epoch % seconds_in_a_day)
。
现在,由于今天的秒数已经过去,因此我们可以将其除以一个小时中的秒数来得出小时数。由于北京的时区是UTC + 8,因此此处将8添加到结果中。
由于我们一天之内还有几秒钟,所以花了几小时又几秒钟,我们重复了几天使用的逻辑。如果我们知道从今天开始已经过去了n
秒,那么我们就可以用一个小时内的秒数来计算该时间的模数,以获取上一次未完成的秒数的“剩余”秒数小时。现在,我们将其除以seconds_in_a_minute
,将秒转换为分钟。
相同的逻辑适用于秒。
答案 1 :(得分:1)
我也一直在尝试学习本书中的python编码,今天我遇到了这个问题。这是我的尝试,
total_secs = time.time()
seconds = total_secs % 60
minutes = (total_secs // 60) % 60
hours = (total_secs // 3600) % 24
days = total_secs // (3600 * 24)
其背后的逻辑是,seconds
是总秒数的余数除以一分钟的秒数,而minutes
是总分钟数的余数除以分钟数在一个小时内,通过这种逻辑,我们可以以相同的方式获得hours
和days
。
该代码更易于阅读和理解,希望它可以为以后阅读此书的未来python初学者清除一些困惑。