小编典典

使用Python计算时差

python

我想知道是否有一种方法或内置库可用于从两个字符串输入中查找时间差。

我的意思是,如果我有2个输入字符串:

  1. ‘2013-10-05T01:21:07Z’
  2. ‘2013-10-05T01:21:16Z’

如何计算时间差并将其打印为输出。

我知道这听起来有些愚蠢,但是对此有任何帮助,我们深表感谢。


阅读 214

收藏
2020-12-20

共1个答案

小编典典

使用解析字符串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) / 86400
hours = int(d) / 3600 % 24
minutes = int(d) / 60 % 60
seconds = int(d) % 60

最后一块仅适用于正差异,因此请注意不要交换ab;-)

但是@JFSebastian正确指出这可能不是您想要的。从符号看来,您的字符串描述的是UTC时间,而不是本地时间。只是时间上的差异,以防您的时间跨过DST开关,这才有意义。在这种情况下,当然会导致时差过大一小时或过小一小时(因为UTC始终没有DST)。

为了避免这种情况,可以将DST标志从自动(-1)设置为固定值(例如0表示关闭),并使用以下值:

a = time.mktime(a[:-1] + (0,))  # switch DST to off
b = 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,可能正是您所要的。

2020-12-20