Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 减去转换为datetime对象的字符串_Python_Datetime_Timedelta - Fatal编程技术网

Python 减去转换为datetime对象的字符串

Python 减去转换为datetime对象的字符串,python,datetime,timedelta,Python,Datetime,Timedelta,我有一段代码,它在24小时内获取输入,如23:59,并打印剩余时间,因此如果是上午11:59,它将返回12小时 到目前为止,我已经能够做到这一点,但我现在无法判断这段代码出了什么问题: 从日期时间导入日期时间 def时间(t): 时间=t future=datetime.strtime(时间,“%H:%M”).replace(天=datetime.now().day,year=datetime.now().year,month=datetime.now().month) timeleft=(fu

我有一段代码,它在24小时内获取输入,如
23:59
,并打印剩余时间,因此如果是上午11:59,它将返回12小时

到目前为止,我已经能够做到这一点,但我现在无法判断这段代码出了什么问题:

从日期时间导入日期时间
def时间(t):
时间=t
future=datetime.strtime(时间,“%H:%M”).replace(天=datetime.now().day,year=datetime.now().year,month=datetime.now().month)
timeleft=(future-datetime.now())
返回时间限制
作为参考,
print(timeuntil(22:00))
在晚上8:43运行时返回了
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)

什么是
eta
?你确定你不是指
future-datetime.now()
?@PacketLoss my bad我为清楚起见重命名了变量,但遗漏了一个。很好,您希望它输出什么?@PacketLoss我希望得到时间之前剩下的小时分秒,因此datetime对象将非常适合于此。正如你所看到的,它现在返回的格式很好,但它不是正确的,因为它说从1小时15分钟到晚上10点有16个小时。谢谢,但这不是我想要的,我相信你看到了“23:59”并得到了第二天的全部内容,但是我已经将代码更新为一个函数,这样我就可以更清楚地知道我在寻找什么了。它非常接近,但我只知道一件事。目前,它正在执行UTC时间。这里的输入是当地时间,也就是PST。因此,时间都是8小时。有没有办法使datetime.now()在PST中?或者我们必须将输入转换为UTC吗?@AbidRasheed我已将答案更新为包含
US/Pacific
时区。它工作正常,谢谢!