У меня есть объект datetime, не зависящий от часового пояса, к которому мне нужно добавить часовой пояс, чтобы иметь возможность сравните его с другими объектами datetime, учитывающими часовой пояс. Я не хочу переводить все свое приложение в часовой пояс, не зная этого, в этом одном устаревшем случае.
Что я пробовал
Во-первых, чтобы продемонстрировать проблему:
Код: Выделить всё
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=)
>>> aware == unaware
Traceback (most recent call last):
File "", line 1, in
TypeError: can't compare offset-naive and offset-aware datetimes
Код: Выделить всё
>>> unaware.astimezone(pytz.UTC)
Traceback (most recent call last):
File "", line 1, in
ValueError: astimezone() cannot be applied to a naive datetime
>>>
Код: Выделить всё
>>> unaware.replace(tzinfo=pytz.UTC)
datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=)
>>> unaware == aware
Traceback (most recent call last):
File "", line 1, in
TypeError: can't compare offset-naive and offset-aware datetimes
>>>
Кроме того, я пробовал это как в Python 2.6, так и в Python 2.7, с одинаковыми результатами.
Контекст
Я пишу парсер для некоторых файлов данных. Мне нужно поддерживать старый формат, в котором строка даты не имеет индикатора часового пояса. Я уже исправил источник данных, но мне все еще нужно поддерживать устаревший формат данных. Одноразовое преобразование устаревших данных недопустимо по различным причинам, связанным с бизнесом. Хотя в целом мне не нравится идея жестко запрограммировать часовой пояс по умолчанию, в данном случае это кажется лучшим вариантом. Я знаю с достаточной уверенностью, что все рассматриваемые устаревшие данные представлены в формате UTC, поэтому я готов принять риск использования этого значения по умолчанию в этом случае.
Подробнее здесь: https://stackoverflow.com/questions/706 ... -not-naive