Сравнение двух строк даты и времени - PullRequest
0 голосов
/ 04 марта 2019

У меня есть две строки DateTime.Как бы я сравнил их и сказал, что на первом месте?

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

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Этот формат содержит миллисекунды, поэтому он не может быть проанализирован 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
0 голосов
/ 04 марта 2019

Если обе строки даты / времени имеют формат ISO 8601 (ГГГГ-ММ-ДД чч: мм: сс), вы можете сравнить их с простым сравнением строк, например:

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: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.')
...