【问题标题】:Comparing two datetime strings比较两个日期时间字符串
【发布时间】:2019-07-25 23:44:21
【问题描述】:

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

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

【问题讨论】:

标签: python python-datetime datetime-comparison


【解决方案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 是毫秒,但只有您可以肯定地说),那么您可以“munge " 通过解析出最终的 ":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.')

【讨论】:

  • 让我们假设(如果我们查看问题,这不是假设,A = '...)它们的格式还不是正确的,并提供了将它们转换为该格式的部分的答案(让我们比如说从字符串到日期时间)。 (p.s. 我不让自己不投票,但其他人可能不会这样做)。干杯。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2013-09-14
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多