比较两个日期时间字符串
Comparing two datetime strings
我有两个 DateTime 字符串。我如何比较它们并判断哪个在前?
A = '2019-02-12 15:01:45:145'
B = '2019-02-12 15:02:02:22'
如果两个 date/time 字符串都是 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:22'
a = mungeTimeString(a)
b = mungeTimeString(b)
if a < b:
print('Time a comes before b.')
else:
print('Time a does not come before b.')
这种格式有毫秒,所以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
我有两个 DateTime 字符串。我如何比较它们并判断哪个在前?
A = '2019-02-12 15:01:45:145'
B = '2019-02-12 15:02:02:22'
如果两个 date/time 字符串都是 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:22'
a = mungeTimeString(a)
b = mungeTimeString(b)
if a < b:
print('Time a comes before b.')
else:
print('Time a does not come before b.')
这种格式有毫秒,所以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