2013-07-19 2 views
2

Я работаю в django, но стандартное решение python тоже в порядке.Как получить часовое время суток в python?

Я конвертирую код, который использует наивное-datetime для использования aware-datetime.

Ниже приведен исходный код:

today = datetime.today() 
MyClass.objects.filter(datetimefield__range=(today, today+datetime.timedelta(1))) 

Как преобразовать его использовать часовой пояс-Aware время?

Если время Июне/третий/7: 20pm локально,
Я хотел бы получить DATETIME диапазон [jun/3rd/00:00am, jun/4th/00:00am] (с полуночи до полуночи, который будет включать в себя now)

+1

В какой временной зоне должна быть полночь * в *? UTC, часовой пояс сервера или часовой пояс посетителя на вашем сайте? –

+0

Я бы предложил использовать библиотеку 'dateutil' - http://labix.org/python-dateutil –

+1

@JanSpurny: Нет, это отличная библиотека для синтаксического анализа и относительной арифметики даты. Но [Django поддерживает 'pytz'] (https://docs.djangoproject.com/en/1.5/topics/i18n/timezones/) из коробки, так почему бы не придерживаться этого? –

ответ

0

Я знаю, что это очень старый, но с использованием django.utils.timezone это довольно просто. (ничего относительно часовых поясов никогда не кажется мне легко)

# this is could be any datetime.date 
my_date = timezone.now().date() 
dt_at_local_midnight = timezone.make_aware(
    timezone.datetime.combine(my_date, time.min), 
    timezone.get_current_timezone()) 

и альтернатива, которая может быть лучше указана в первом комментарии ниже.

+0

первый пример неверен. Это может создать ненормализованное время (неправильное смещение) (метод '.replace()' может пересекать границу перехода UTC). Второй пример не распознает неоднозначные или несуществующие времена - он молча возвращает * some * значение (в большинстве случаев это нормально, но вы должны знать об этом). См. [Мой ответ на дублированный вопрос] (http://stackoverflow.com/a/11236372/4279), который вызывает исключение в таких случаях, как альтернатива. – jfs

+0

Это имеет смысл. Редактируя ответ, пытаясь понять способ дать кредит, искал метод локализации. – ddipasquo

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