减去转换为日期时间对象的字符串
Subtracting a string converted into a datetime object
我有一段代码,它接受 24 小时制的输入,例如 23:59
,并打印还剩多少时间,所以如果早上是 11:59,它会return 12 小时。
到目前为止我已经能够做到这一点,但我现在无法判断这段代码出了什么问题:
from datetime import datetime
def timeuntil(t):
time = t
future = datetime.strptime(time, '%H:%M').replace(day = datetime.now().day, year = datetime.now().year, month = datetime.now().month)
timeleft = (future - datetime.now())
return timeleft
供您参考,print(timeuntil(22:00))
return 我在 运行 下午 运行 编辑了 15:55:01.996377
。
感谢您的帮助。
我相信您想要到达第二天的秒数。我发现使用时间模块和直接计算更容易理解。
import time
secs_in_day = 60*60*24
secs_time_left_local = secs_in_day - (time.time() - time.altzone) % secs_in_day
hours = int(secs_time_left_local // 3600)
minutes = int((secs_time_left_local % 3600) // 60)
seconds = int((secs_time_left_local % 3600) % 60)
print(f'{hours:02}:{minutes:02}:{seconds:02}')
这个问题在我的机器上似乎无法重现,即使在将 datetime
对象定义为您指定的时间时也是如此。但是,这可能与 datetime
.
上的 replace()
有关
确实没有这个必要,我认为你最好正确地创建一个datetime
对象。下面解决了问题并按您的预期工作。
def timeuntil(begin):
hour, minute = map(int, begin.split(':'))
now = datetime.now()
future = datetime(now.year, now.month, now.day, hour, minute)
return (future - now)
print(timeuntil("23:59"))
#7:35:06.022166
如果您想为 运行 指定一个不同的时区,我们可以用一个时区定义我们的 datetime.now()
,但是我们需要去掉这个来计算 future - now
.
def timeuntil(begin):
hour, minute = map(int, begin.split(':'))
now = datetime.now(timezone('US/Pacific')).replace(tzinfo=None)
future = datetime(now.year, now.month, now.day, hour, minute)
return (future - now)
我有一段代码,它接受 24 小时制的输入,例如 23:59
,并打印还剩多少时间,所以如果早上是 11:59,它会return 12 小时。
到目前为止我已经能够做到这一点,但我现在无法判断这段代码出了什么问题:
from datetime import datetime
def timeuntil(t):
time = t
future = datetime.strptime(time, '%H:%M').replace(day = datetime.now().day, year = datetime.now().year, month = datetime.now().month)
timeleft = (future - datetime.now())
return timeleft
供您参考,print(timeuntil(22:00))
return 我在 运行 下午 运行 编辑了 15:55:01.996377
。
感谢您的帮助。
我相信您想要到达第二天的秒数。我发现使用时间模块和直接计算更容易理解。
import time
secs_in_day = 60*60*24
secs_time_left_local = secs_in_day - (time.time() - time.altzone) % secs_in_day
hours = int(secs_time_left_local // 3600)
minutes = int((secs_time_left_local % 3600) // 60)
seconds = int((secs_time_left_local % 3600) % 60)
print(f'{hours:02}:{minutes:02}:{seconds:02}')
这个问题在我的机器上似乎无法重现,即使在将 datetime
对象定义为您指定的时间时也是如此。但是,这可能与 datetime
.
replace()
有关
确实没有这个必要,我认为你最好正确地创建一个datetime
对象。下面解决了问题并按您的预期工作。
def timeuntil(begin):
hour, minute = map(int, begin.split(':'))
now = datetime.now()
future = datetime(now.year, now.month, now.day, hour, minute)
return (future - now)
print(timeuntil("23:59"))
#7:35:06.022166
如果您想为 运行 指定一个不同的时区,我们可以用一个时区定义我们的 datetime.now()
,但是我们需要去掉这个来计算 future - now
.
def timeuntil(begin):
hour, minute = map(int, begin.split(':'))
now = datetime.now(timezone('US/Pacific')).replace(tzinfo=None)
future = datetime(now.year, now.month, now.day, hour, minute)
return (future - now)