python为discord.Py重复倒计时

2024-09-30 00:36:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个python机器人,作为命令的一部分,我想显示每天服务器重新启动(东部时间晚上11点)之前的时间

这是我写的代码,但它有时会给出一些奇怪的输出,当午夜时,它会返回40小时,直到重新启动

有人能帮我吗

@client.command()
async def gettime(self):
    now = datetime.now()
    # 11 est == 17 gmt+1
    reset = datetime.strptime('16:00', '%H:%M')
    if now == reset:
        await self.send('the restart is happening now')
    elif now < reset:
        untilrestarthour = reset.hour - now.hour
        untilrestartminute = 60 - now.minute
        await self.send(f'the restart is happening in {untilrestarthour} hours and {untilrestartminute}''s ')
    elif now > reset:
        untilrestarthour = 24 - (now.hour - reset.hour)
        untilrestartminute = 60 - now.minute
        await self.send(f'the restart is happening in {untilrestarthour} hours and {untilrestartminute} minute''s ')
    else:
        await self.send("error")


Tags: theselfsenddatetimeis时间awaitnow
1条回答
网友
1楼 · 发布于 2024-09-30 00:36:03

在当前版本中,从24小时到60分钟进行减法,因此最后从24h+60minutes进行减法,得到25h。你必须做一些类似的事情

    untilrestarthour = reset.hour - now.hour

    if now.minute > 0:
          untilrestarthour -= 1
          untilrestartminute = 60 - now.minute
    else:
          untilrestartminute = 0

但最好使用正确的日期而不是1900-01-01,然后可以使用now - resetreset - now正确计算小时和分钟

from datetime import datetime, timedelta

now = datetime.now()
reset = now.replace(hour=16, minute=0)
#reset += timedelta(days=1) # next day

print('  now:', now)
print('reset:', reset)
print('reset-now:', reset-now)
print('now-reset:', now-reset)

if now == reset:
    print('the restart is happening now')
elif now < reset:
    print('reset in the future:', reset-now)
elif now > reset:
    print('reset in the past:', now-reset)
else:
    print("error")

结果

  now: 2020-05-20 17:49:04.029570
reset: 2020-05-20 16:00:04.029570

reset-now: -1 day, 22:11:00
now-reset: 1:49:00

reset in the past: 1:49:00

唯一的问题是now - resetreset - now)创建对象datetime.timedelta,该对象可以生成字符串1:49:00,但不能分别给出小时1和分钟49。它只给出总秒数,您必须手动将秒数转换为小时和分钟

print('reset:', reset)
print('  now:', now)

diff = (reset-now)
print('diff:', diff)

seconds = diff.seconds
print('seconds:', seconds)

hours = seconds//3600
seconds = seconds % 3600

minutes = seconds // 60
seconds = seconds % 60

print('hours:', hours, '| minutes:', minutes, '| seconds:', seconds)

结果:

 reset: 2020-05-21 16:00:37.395018
   now: 2020-05-20 18:00:37.395018

diff: 22:00:00
seconds: 79200
hours: 22 | minutes: 0 | seconds: 0

相关问题 更多 >

    热门问题