2015-07-10 3 views
4
>> a ='2009-05-10' 
>>> b ='2009-06-10' 
>>> a > b 
False 
>>> a < b 
True 
>>> type(a) 
<class 'str'> 
>>> c = '2009-06-09' 
>>> b < c 
False 
>>> b > c 
True 
>>> c ='2008-07' 
>>> b > c 
True 
>>> a > c 
True 

Я попытался сравнить даты в python3 без использования библиотеки и, похоже, работает правильно. Это настоящий случай? Действительно ли python понимает, что эти строки являются датами и сравнивают их в соответствии с форматом даты или что-то еще происходит за кулисами?Сравнение строк даты в python

+3

Если вы выбираете разумный формат даты, как это, стандартный лексикографический сортировка строк работает, как если бы он знал, что они были даты; это ** не **, хотя. – jonrsharpe

+0

Если Python просто проанализировал содержимое вашей строки, чтобы выяснить, что они представляют, почему у него есть встроенный модуль [datetime] (https://docs.python.org/2/library/datetime.html)? –

+0

Yup. Теперь все ясно. Благодарю. – SpiderRico

ответ

7

Нет, за этим поведением нет пространственной информации. По сути, Python сравнивает строки лексикографии, и в этом случае он работает, но это не правильный путь, потому что он также может принимать неправильные даты!

Вот Контрпример:

>>> a ='2009-33-10' 
>>> b ='2009-11-1' 
>>> a>b 
True 

Как надлежащим образом для работы с датами, вы должны использовать datetime модуль, который имеет много инструментов для работы с датой объектов.

Вы можете преобразовать свои объекты на дату с datetime.datetime.strptime, а затем вы можете использовать базовую арифметическую операцию для сравнения объектов даты, поскольку они уже поддерживаются этим модулем.

enter image description here

+0

@ Kasramvd нет никаких проблем с вашим объяснением. Тем не менее, это контекст того, когда строки даты и времени равномерно отформатированы (так что ваш пример не применяется) и были отформатированы из объектов datetime, тогда сравнение прямых строк datetime на самом деле является хорошим перком Python3! – Devy

+0

@Devy Действительно, в этом случае вы можете. Но, в основном, вам лучше не делать этого (обычно, как правило, не всегда получается согласованный формат), если только это не может дать существенное изменение в производительности. – Kasramvd

Смежные вопросы