<分区>
我想知道是否有一种方法或内置库可以找到两个字符串输入的时间差异。
我的意思是,如果我有 2 个输入字符串:
- '2013-10-05T01:21:07Z'
- '2013-10-05T01:21:16Z'
如何计算时间差并将其打印为输出。
我知道这听起来有点傻,但我们很感激任何帮助。
标签 python date time gps difference
<分区>
我想知道是否有一种方法或内置库可以找到两个字符串输入的时间差异。
我的意思是,如果我有 2 个输入字符串:
如何计算时间差并将其打印为输出。
我知道这听起来有点傻,但我们很感激任何帮助。
最佳答案
使用 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) 设置为自动),结果是时间结构。这些仍然反射(reflect) DST 是明确关闭 (0)、开启 (1) 还是隐式自动 (-1)。将这些转换为 float (自 1970-01-01 以来的秒数):
a = time.mktime(a)
b = time.mktime(b)
然后计算差异(以秒为单位):
d = b - a
并将它们转换为天/小时/分钟/秒:
days = int(d) / 86400
hours = int(d) / 3600 % 24
minutes = int(d) / 60 % 60
seconds = int(d) % 60
最后一个 block 只适用于正差异,所以注意不要交换 a
和 b
;-)
但是@J.F.Sebastian 正确地指出这可能不是您想要的。从符号看来,您的字符串描述的是 UTC 时间,而不是本地时间。对于纯粹的时间差异,如果您的时间跨度超过 DST 开关,则这是相关的。在这种情况下,它当然会导致时差过大一小时或过小一小时(因为 UTC 始终没有 DST)。
为避免这种情况,您可以将 DST 标志从自动 (-1) 设置为固定值(例如 0 表示关闭)并使用这些值:
a = time.mktime(a[:-1] + (0,)) # switch DST to off
b = time.mktime(b[:-1] + (0,))
或者,正如@J.F.Sebastian 指出的那样,您可以忘记 time
模块,而是使用不知道 DST 方面的 datetime.datetime
:
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
的结果,这很可能正是您要查找的内容。
关于python - 使用Python计算时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23885390/