我想知道是否有方法或内置库可以找到两个字符串输入的时间差异。
我的意思是,如果我有2个输入字符串:
如何计算时间差并将其打印为输出。
我知道这听起来有点傻,但对此有任何帮助表示赞赏。
答案 0 :(得分:7)
使用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
最后一个块仅适用于正差异,因此请注意不要交换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
的内容,这可能正是您正在寻找的内容。
答案 1 :(得分:7)
您似乎使用的是ISO 8601格式dateTime。此格式用于许多地方,包括GPS交换格式。
[-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]
import 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")
c = b - a
print(c)
<强>优点:强>
<强>缺点:强>
import dateutil.parser
a = dateutil.parser.parse("2013-10-05T01:21:07Z")
b = dateutil.parser.parse("2013-10-05T01:21:16Z")
c = b - a
print(c)
<强>优点:强>
<强>缺点:强>
<强>优点:强>
<强>缺点:强>
答案 2 :(得分:-2)
import datetime
a = datetime.datetime.now()
b = datetime.datetime.now()
c = b - a
datetime.timedelta(0, 8, 562000)
divmod(c.days * 86400 + c.seconds, 60)
原始答案 here