使用解析字符串
strptime():
a = time.strptime('2013-10-05T01:21:07Z', '%Y-%m-%dT%H:%M:%SZ')b = time.strptime('2013-10-05T01:21:16Z', '%Y-%m-%dT%H:%M:%SZ')这会将给定的时间字符串解析为本地时间(将夏令时(DST)设置为自动),并且结果为时间结构。这些仍然反映DST是显式关闭(0),打开(1)还是隐式自动(-1)。将它们转换为浮点数(从1970-01-01开始的秒数):
a = time.mktime(a)b = time.mktime(b)
然后计算差异(以秒为单位):
d = b - a
并将它们转换为天/小时/分钟/秒:
days = int(d) / 86400hours = int(d) / 3600 % 24minutes = int(d) / 60 % 60seconds = int(d) % 60
最后一块仅适用于正差异,因此请注意不要交换
a和
b;-)
但是@JFSebastian正确指出这可能不是您想要的。从符号看来,您的字符串描述的是UTC时间,而不是本地时间。只是时间上的差异,以防您的时间跨过DST开关,这才有意义。在这种情况下,当然会导致时差过大一小时或过小一小时(因为UTC始终没有DST)。
为了避免这种情况,可以将DST标志从自动(-1)设置为固定值(例如0表示关闭),并使用以下值:
a = time.mktime(a[:-1] + (0,)) # switch DST to offb = time.mktime(b[:-1] + (0,))
或者,正如@JFSebastian指出的那样,您可能会忘记该
time模块,而使用
datetime.datetime不了解DST方面的模块:
a = datetime.datetime.strptime('2013-10-05T01:21:07Z', '%Y-%m-%dT%H:%M:%SZ')b = datetime.datetime.strptime('2013-10-05T01:21:16Z', '%Y-%m-%dT%H:%M:%SZ')然后,结果是
datetime可以直接减去的
timedelta对象,以获得表示所需时差的对象。打印它会导致某事
0:00:05,可能正是您所要的。



