【发布时间】:2014-10-31 01:23:41
【问题描述】:
例如,如果开始时间是上午 8:00,我如何计算 20 小时后的时间?
【问题讨论】:
-
所以你想为你的计时器做 20 个小时?
-
@smushi 我的程序应该每 20 小时(不是实时,而是假设)要求用户输入,并在每 20 小时后计算当前时间。
-
@eskoka 也请支持答案
例如,如果开始时间是上午 8:00,我如何计算 20 小时后的时间?
【问题讨论】:
需要使用timedelta之类的东西
from datetime import datetime, timedelta
twenty_hours= datetime.now() + timedelta(hours=20)
当然,您可以将 datetime.now() 更改为早上 8 点或您希望的任何时间
>>> format(twenty_hours, '%H:%M:%S')
'23:24:31'
【讨论】:
您的问题至少有两种可能的解释:
找出距现在正好 20 小时的当地时间:
#!/usr/bin/env python3
from datetime import datetime, timedelta, timezone
now = datetime.now(timezone.utc) # current time in UTC
in20hours = (now + timedelta(hours=20)).astimezone() # local time in 20 hours
print("Local time in 20 hours: {in20hours:%I:%M %p}".format(**vars())) # AM/PM
在忽略本地 UTC 偏移的任何变化(由于 DST 转换或任何其他原因)的情况下查找时间:
#!/usr/bin/env python
from datetime import datetime, timedelta, timezone
now = datetime.now() # local time
by20hours = now + timedelta(hours=20) # move clock by 20 hours
print("Move clock by 20 hours: {by20hours:%I:%M %p}".format(**vars())) # AM/PM
如果本地 UTC 偏移量在接下来的 20 小时内不变,这两种方法会产生相同的结果。否则第二种方法失败,20小时过去后求时间。
如果您想在同一当地时间做某事,无论相隔多少小时,您可能需要第二种方法,例如,如果您想在早上 6 点起床,无论是否经过了 24 小时。见How can I subtract a day from a Python date?
如果您使用当地时间,有关时间算术的更多详细信息,请参阅Find if 24 hrs have passed between datetimes - Python。
【讨论】: