Python时差

Python时差,python,datetime,time,Python,Datetime,Time,我有两个时间物体 范例 time.struct_time(tm_year=2010, tm_mon=9, tm_mday=24, tm_hour=19, tm_min=13, tm_sec=37, tm_wday=4, tm_yday=267, tm_isdst=-1) time.struct_time(tm_year=2010, tm_mon=9, tm_mday=25, tm_hour=13, tm_min=7, tm_sec=25, tm_wday=5, tm_yday=268, tm_

我有两个时间物体

范例

time.struct_time(tm_year=2010, tm_mon=9, tm_mday=24, tm_hour=19, tm_min=13, tm_sec=37, tm_wday=4, tm_yday=267, tm_isdst=-1)

time.struct_time(tm_year=2010, tm_mon=9, tm_mday=25, tm_hour=13, tm_min=7, tm_sec=25, tm_wday=5, tm_yday=268, tm_isdst=-1)
我想知道这两者的区别。我怎么能这么做?
我只需要分钟和秒,以及这两个时间的持续时间。

您可以对struct_time对象(传递为“t”)使用
time.mktime(t)
将其转换为“自历元起秒数”浮点值。然后,您可以减去这些以秒为单位的差值,再除以60以分钟为单位的差值。

Time
实例不支持减法操作。考虑到解决此问题的一种方法是将时间转换为自历元起的秒数,然后找出差异,使用:

>>> t1 = time.localtime()
>>> t1
time.struct_time(tm_year=2010, tm_mon=10, tm_mday=13, tm_hour=10, tm_min=12, tm_sec=27, tm_wday=2, tm_yday=286, tm_isdst=0)
>>> t2 = time.gmtime()
>>> t2
time.struct_time(tm_year=2010, tm_mon=10, tm_mday=13, tm_hour=4, tm_min=42, tm_sec=37, tm_wday=2, tm_yday=286, tm_isdst=0)

>>> (time.mktime(t1) - time.mktime(t2)) / 60
329.83333333333331

还有另一种方法可以找到任意两个日期之间的时差(我想这并不比以前的解决方案好):


它将以天、秒或两者的组合给出差异。(dt2-dt1)的类型是datetime.timedelta。查看以了解更多详细信息。

查看:时区感知回答:在python 3中,mktime函数返回自历元以来的秒数,因此无需除以60。本地时间可能不明确,因此
mktime()
可能返回错误的结果(DST转换结束时有50%的几率,或者如果未使用历史tz数据库,则过去的日期是错误的)。除非本地时区是UTC,否则传递UTC时间是不正确的。@AdamOren:
mktime()
始终返回“从历元开始的秒数”.
/60
返回操作请求的分钟数。我将使用
分钟,秒=divmod(秒,60)
分别获取分钟,秒,或使用
时间增量
作为。不适用于Python 3.6:
错误消息:“不支持的操作数类型”对于-:“time.struct\u time”和“time.struct\u time”
@Suncatcher-huh?它与python3配合得很好-看,是的,我犯了错。我传递了错误的参数。顺便问一下,有没有更简单的方法直接使用
time.struct\u time
类型?而不转换为
mktime
@J.F.Sebastian你的观点是,当你支持提供2个时间戳,理解从DST到非DST的转换或从DST到非DST的转换。同意。我不理解短语“理解转换”。单击我上面评论中的链接。它明确描述了mktime失败时的情况。
>>> t1 = time.mktime(time.strptime("10 Oct 10", "%d %b %y"))
>>> t2 = time.mktime(time.strptime("15 Oct 10", "%d %b %y"))
>>> print(datetime.timedelta(seconds=t2-t1))
5 days, 0:00:00
 >>> import datetime
 >>> dt1 = datetime.datetime.strptime("10 Oct 10", "%d %b %y")
 >>> dt2 = datetime.datetime.strptime("15 Oct 10", "%d %b %y")
 >>> (dt2 - dt1).days
 5
 >>> (dt2 - dt1).seconds
 0
 >>>