Пока я использую обычную оболочку Python, команда datetime.datetime.now() прекрасно работает для получения локального (не UTC) времени системы.

Но я работаю над проектом Django, где часовой пояс изменяется в settings.py с помощью TIME_ZONE = 'UTC'.

Я перепробовал множество решений от django.utils timezone до модуля tzlocal, но ни одно из них не работает. Все они возвращают неверное или UTC время.

Все решения работают, если я изменю часовой пояс в settings.py на свой местный часовой пояс. Но я не могу этого сделать, поэтому есть ли способ обойти опцию часового пояса по умолчанию в {{ X1 } } ? Или каким-либо образом часовой пояс settings.py может быть автоматически обновлен? Если я удалю строку TIME_ZONE, я не знаю почему, но, похоже, получился случайный часовой пояс.

РЕДАКТИРОВАТЬ -

Я знаю, что часовой пояс можно ввести вручную с помощью pytz, но я не хочу это сделать. Я хочу получить местный системный часовой пояс, но БЕЗ модерации Django о часовом поясе.

Спасибо.

3
FadedCoder 11 Янв 2017 в 16:40

3 ответа

Лучший ответ

Джанго, кажется, помещает свой часовой пояс в переменную окружения TZ. Попробуйте del os.environ['TZ'] затем с помощью tzlocal.

1
Josh Lee 12 Янв 2017 в 02:44

Вы можете использовать Javascript, чтобы получить смещение часового пояса от браузера до UTC. Вот код

var d = new Date()
var n = d.getTimezoneOffset()
alert(n)

Результатом является количество минут. Например, вы получите 480 в Лос-Анджелесе. если результатом является отрицательное число, часовой пояс должен быть «Запад», напротив, положительное число означает «Восток». И 1 часовой пояс = 60 минут, так что вы можете вычислить 480/60 = 8. Тогда результат - Лос-Анджелес находится в западном 8 часовом поясе. Затем вы можете использовать pytz, чтобы узнать местное время.

-2
Cody Zhou 12 Янв 2017 в 01:50

Чтобы узнать время для другого часового пояса, используйте этот код:

# create another timezone instance
import pytz
new_york_tz = pytz.timezone("America/New_York")

# get the current date and time, with the timezone set in your settings.py
from django.utils import timezone
d = timezone.now()
print(d)

# get the date and time in your other timezone
d2 = new_york_tz.normalize(d)
print(d2)

См. https: // docs. .djangoproject.com / о / 1,10 / темы / i18n / часовые пояса / # наивные и Осведомленные - DateTime - объекты

1
Udi 11 Янв 2017 в 13:54