如何从时间字符串中减去datenow?

时间:2015-04-11 15:43:13

标签: python date datetime time web-scraping

我有一个看似非常容易的问题,但我无法弄明白。

我想实现以下目标: Time_as_string - time_now =分钟,直到时间为字符串。

我从网站上抽出时间作为字符串,例如:'15:30'

我想从中减去当前时间以显示多少分钟 留下直到刮掉的时间字符串。

我尝试了许多内容,例如strftime(),转换为unix时间戳,google搜索解决方案等。 我可以通过strftime()从字符串中创建一个时间对象,但我无法从当前时间中减去它。

实现这一目标的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

from datetime import datetime

s = "15:30"
t1 = datetime.strptime(s,"%H:%M")

diff = t1 - datetime.strptime(datetime.now().strftime("%H:%M"),"%H:%M")

print(diff.total_seconds() / 60)
94.0

答案 1 :(得分:0)

如果'15:30'属于今天:

#!/usr/bin/env python3
from datetime import datetime, timedelta

now = datetime.now()
then = datetime.combine(now, datetime.strptime('15:30', '%H:%M').time())
minutes = (then - now) // timedelta(minutes=1)

如果从现在到现在可能有午夜,即明天是then;你可以考虑一个负面差异(如果then似乎在过去相对于now)作为一个指标:

while then < now:
    then += timedelta(days=1)
minutes = (then - now) // timedelta(minutes=1)

在较旧的Python版本上,(then - now) // timedelta(minutes=1)无效,您可以使用(then - now).total_seconds() // 60代替。

代码假定本地时区的utc偏移量与nowthen相同。请参阅more details on how to find the difference in the presence of different utc offsets in this answer

答案 2 :(得分:-1)

最简单的方法可能是相互减去两个日期时间并使用total_seconds()

>>> d1 = datetime.datetime(2000, 1, 1, 20, 00)
>>> d2 = datetime.datetime(2000, 1, 1, 16, 30)
>>> (d1 - d2).total_seconds()
12600.0

请注意,如果时间位于不同的时区(我刚刚选择2000年1月1日使其成为日期时间),这将无效。否则,在相同的时区(或UTC)中构造两个日期时间,减去它们并再次使用total_seconds()以获得差异(剩余时间),以秒为单位。