Что мне нужно сделать
У меня есть объект даты и времени, не зависящий от часового пояса, к которому мне нужно добавить часовой пояс, чтобы иметь возможность сравнивать его с другим часовым поясом.осведомленные объекты даты и времени.Я не хочу преобразовывать все мое приложение в часовой пояс, не подозревая об этом одном унаследованном случае.
Что я уже пробовал
Сначала, чтобы продемонстрировать проблему:
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import pytz
>>> unaware = datetime.datetime(2011,8,15,8,15,12,0)
>>> unaware
datetime.datetime(2011, 8, 15, 8, 15, 12)
>>> aware = datetime.datetime(2011,8,15,8,15,12,0,pytz.UTC)
>>> aware
datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=<UTC>)
>>> aware == unaware
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't compare offset-naive and offset-aware datetimes
Сначала я попробовал astimezone:
>>> unaware.astimezone(pytz.UTC)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: astimezone() cannot be applied to a naive datetime
>>>
Не удивительно, что это не удалось, так как он на самом деле пытается выполнить преобразование.Замена кажется лучшим выбором (согласно Python: как получить значение datetime.today (), которое «учитывает часовой пояс»? ):
>>> unaware.replace(tzinfo=pytz.UTC)
datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=<UTC>)
>>> unaware == aware
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't compare offset-naive and offset-aware datetimes
>>>
Но как вы можетевидите, замена, кажется, устанавливает tzinfo, но не делает объект осведомленным.Я собираюсь вернуться к лечению входной строки, чтобы иметь часовой пояс перед его синтаксическим анализом (я использую dateutil для анализа, если это имеет значение), но это кажется невероятно глупым.
Кроме того, я 'мы пробовали это и в python 2.6, и в python 2.7 с одинаковыми результатами.
Context
Я пишу парсер для некоторых файлов данных.Существует старый формат, который мне нужно поддерживать, когда строка даты не имеет индикатора часового пояса.Я уже исправил источник данных, но мне все еще нужно поддерживать устаревший формат данных.Однократное преобразование устаревших данных не подходит по разным причинам бизнес-BS.Хотя в целом мне не нравится идея жесткого кодирования часового пояса по умолчанию, в этом случае он кажется наилучшим вариантом.Я с достаточной уверенностью знаю, что все унаследованные данные находятся в UTC, поэтому я готов принять на себя риск невыполнения этого требования в этом случае.