0

我有两个 DateTime 字符串。我将如何比较它们并判断哪个先出现?

A = '2019-02-12 15:01:45:145'
B = '2019-02-12 15:02:02:22'
4

2 回答 2

2

这种格式有毫秒,所以它不能被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
于 2019-03-04T16:41:35.143 回答
1

如果两个日期/时间字符串都是 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.')
于 2019-03-04T16:24:48.087 回答