Использование модуля Zope DateTime

DateTime('2009/06/16') != DateTime('2009-06-16')

Будьте внимательнее при использовании преобразования строки даты с помощью модуля Zope DateTime.

Недавно я был удивлён некоторым отличием в способах, которыми модуль DateTime парсит строки дат в различном формате. Я то наивно полагал, что результаты не отличаются:

>>> from DateTime import DateTime
>>> DateTime('2009/06/16')
DateTime('2009/06/16')
>>> DateTime('2009-06-16')
DateTime('2009/06/16')

Вроде всё хорошо, но:

>>> DateTime('2009/06/16') == DateTime('2009-06-16')
False

Подождите ка... Как?!?

>>> DateTime('2009/06/16').rfc822()
'Tue, 16 Jun 2009 00:00:00 +0200'
>>> DateTime('2009-06-16').rfc822()
'Tue, 16 Jun 2009 00:00:00 +0000'

Как Вы видите, способ форматирования дат при обработке DateTime имеет значение: может добавляться часовой пояс (timezone) в результат. И это может испортить результаты запроса поиска в каталоге, если Вы используете слеши при сохранении содержимого и тире при запросах (или какой либо другой способ). Думаю, это где-то документировано, но зачем смотреть документацию, если теперь Вы "знаете" как это работает.

По материалам vlent.nl (Mark van Lent)

Перевод ООО «Комтет» komtet.ru