2016-07-31 2 views
3

Мне нужно сравнить две даты на сервере с python на каждой строке данных. В этом случае я использовал datetime, но из-за некоторых ограничений он будет тратить много времени на большие данные. Я использовал ниже код, чтобы создать datetime объект и использовать в дальнейшем:Сравнение двух дат как строки

first_date = datetime.strptime(line_content[3], '%Y-%m-%dT%H:%M:%S.000000Z') 
second_date = datetime.strptime(line_content[4].strip(), '%Y-%m-%dT%H:%M:%S.000000Z') 

Я хочу, чтобы сравнить даты их строки и не использовать datetime, если я делаю так, что будет много сокращения затрат времени в эти данные. поэтому используйте нижеприведенные тесты в этом отношении в python:

>>> "2016-07-28T06:04:12.000000Z" < "2016-04-28T06:04:13.000000Z" 
False 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T06:04:13.000000Z" 
True 
>>> 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T06:04:11.000000Z" 
False 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T06:04:12.000000Z" 
False 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T07:04:12.000000Z" 
True 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T06:04:12.000000Z" 
False 
>>> 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-26T06:04:12.000000Z" 
False 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-29T06:04:12.000000Z" 
True 
>>> "2016-07-28T06:04:12.000000Z" < "2016-07-28T06:04:12.000000Z" 
False 
>>> 

Это хороший способ сравнить дату. Я имею в виду, можете ли вы показать мне пример, что этот код не будет работать?

+2

Это нехорошо и не работает. Python сравнивает строки лексикографически. Построение объекта 'datetime' не должно быть шеей бутылки производительности. Вы уверены, что это является причиной проблемы? – DeepSpace

+0

@DeepSpace, но если даты все отформатированы одинаково, не так ли? – Julien

+0

@DeepSpace: поэтому очевидный нерабочий пример не имеет нулевого заполнения. Можете ли вы указать, когда 'strptime' будет делать это? – usr2564301

ответ

3

Да - синтаксический анализ даты с Python довольно медленный, поскольку даты и время - complex things. Согласно this потоку stackoverflow, регулярное выражение может быть быстрее для синтаксического анализа.

Я бы подумал еще раз, если вам действительно нужно разобрать строки, так как похоже, что ваши данные чистые и имеют одинаковый формат в вашем случае, это может сработать.

Вещи, чтобы иметь в виду, прежде чем идти с этим подходом:

  • Вы знаете формат вашей строки?
  • Действительно ли это из года> месяца> дня> часа> минуты> секунды> и т. Д.
  • Имеются ли все ваши данные в том же формате?
  • Все данные приведены в той же временной зоне?