我有两个 DateTime 字符串。我将如何比较它们并判断哪个先出现?
A = '2019-02-12 15:01:45:145'
B = '2019-02-12 15:02:02:22'
我有两个 DateTime 字符串。我将如何比较它们并判断哪个先出现?
A = '2019-02-12 15:01:45:145'
B = '2019-02-12 15:02:02:22'
这种格式有毫秒,所以它不能被time.strptime
. 我选择根据最后一个冒号进行拆分,解析左边部分,然后手动转换右边部分,将它们相加。
A = '2019-02-12 15:01:45:145'
B = '2019-02-12 15:02:02:22'
import time
def parse_date(s):
date,millis = s.rsplit(":",1)
return time.mktime(time.strptime(date,"%Y-%m-%d %H:%M:%S")) + int(millis)/1000.0
print(parse_date(A))
print(parse_date(B))
印刷:
1549958505.145
1549958522.022
现在比较结果而不是打印它们以获得您想要的
如果您对毫秒的约定不同(例如:这里22
也可能表示220
),那么它会略有不同。在右边用零填充,然后解析:
def parse_date(s):
date,millis = s.rsplit(":",1)
millis = millis+"0"*(3-len(millis)) # pad with zeroes
return time.mktime(time.strptime(date,"%Y-%m-%d %H:%M:%S")) + int(millis)/1000.0
在这种情况下,结果是:
1549958505.145
1549958522.22
如果两个日期/时间字符串都是 ISO 8601 格式 (YYYY-MM-DD hh:mm:ss),您可以将它们与简单的字符串比较进行比较,如下所示:
a = '2019-02-12 15:01:45.145'
b = '2019-02-12 15:02:02.022'
if a < b:
print('Time a comes before b.')
else:
print('Time a does not come before b.')
但是,您的字符串有一个额外的“:”,然后是……毫秒?我不知道。但是,如果您将它们转换为标准的 hh:mm:ss.xxx... 形式,那么您的日期字符串将自然具有可比性。
如果没有办法改变您以hh:mm:ss:xx
格式接收这些字符串的事实(我假设那xx
是毫秒,但只有您可以肯定地说),那么您可以通过解析最终的字符串来稍微“调整”字符串“:xx”并将其重新附加为“.xxx”,如下所示:
def mungeTimeString(timeString):
"""Converts a time string in "YYYY-MM-DD hh:mm:ss:xx" format
to a time string in "YYYY-MM-DD hh:mm:ss.xxx" format."""
head, _, tail = timeString.rpartition(':')
return '{}.{:03d}'.format(head, int(tail))
然后调用它:
a = '2019-02-12 15:01:45.145'
b = '2019-02-12 15:02:02.022'
a = mungeTimeString(a)
b = mungeTimeString(b)
if a < b:
print('Time a comes before b.')
else:
print('Time a does not come before b.')