2017-02-10 11 views
0

Я использую часовые пояса, знающие объекты в течение моего приложения, кроме случаев, когда у меня есть TimeField представлять общее, ежедневное время суток:Сравните Django TimeField с информацией о времени и времени в часовом поясе; сравнить наивное время с timezone.now()

class MyModel(models.Modal): 
    ... 
    start_time = models.TimeField() 

Однако, в некоторых точках , Мне нужно сравнить текущее время: timezone.now() в start_time, используя часовой пояс сервера, чтобы узнать, прошло ли время в любой день.

Как я могу преобразовать start_time в объект datetime, осведомленный о часовом поясе, который можно сравнить с timezone.now()?

Я использую USE_TZ = True

+0

Вы пробовали локализовать() или as_timezone()? – deweyredman

+0

также, как начинается время начала? как наивный datetime или часовой пояс? – deweyredman

+0

также, почему вы не используете поле datetimefield? – deweyredman

ответ

1

Это простой способ:

from django.utils.timezone import now, localtime 

if model.start_time >= localtime(now()).time(): 
    # do stuff 

Обратите внимание, что localtime() использует текущий часовой пояс, который часовой пояс по умолчанию, если явно не установлено. Если это не то, что вы хотите, вы можете указать желаемый часовой пояс в качестве аргумента для localtime().

Также обратите внимание, что с Django 1.11 вы можете просто использовать localtime().time().