Подтвердить что ты не робот

Python получает текущее время в правильном часовом поясе

Прямо сейчас я использую

import datetime
print(datetime.datetime.now().strftime("%X"))

для отображения текущего времени в виде строки.
Проблема в том, что мой компьютер работает в часовом поясе Europe/Berlin, и смещение +2 в UTC здесь не учитывается. Вместо 19:22:26 должно отображаться 21:22:26 Также отличается от других ответов, которые я нашел здесь, я не храню его, звоня

datetime.datetime(2014, 7, 10, 18, 44, 59, 193982, tzinfo=<UTC>)

но

datetime.datetime.now()

поэтому я попытался (и не смог) сделать следующее:

>>> from pytz import timezone
>>> datetime.datetime.now().astimezone(timezone('Europe/Berlin'))
 ValueError: astimezone() cannot be applied to a naive datetime


Изменить:

Ответ

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

Сервер, с которым у меня возникла эта проблема, больше не существует. Во всяком случае, вот некоторые другие вещи, которые стоит проверить:

  • Правильно ли настроен часовой пояс вашего сервера/системы?
    • Виртуальные машины или док-контейнеры могут быть не синхронизированы с хостом, это стоит проверить.
  • Время на этом компьютере правильное? У вас не осталось +2 часов после смены часового пояса?
4b9b3361

Ответ 1

Чтобы получить текущее время в локальном часовом поясе как наивный объект datetime:

from datetime import datetime
naive_dt = datetime.now()

Если он не возвращает ожидаемое время, значит, ваш компьютер неправильно настроен. Сначала вы должны исправить это (это не связано с Python).

Чтобы получить текущее время в UTC как наивный объект datetime:

naive_utc_dt = datetime.utcnow()

Чтобы получить текущее время как знающий объект datetime в Python 3.3 +:

from datetime import datetime, timezone

utc_dt = datetime.now(timezone.utc) # UTC time
dt = utc_dt.astimezone() # local time

Чтобы получить текущее время в данном часовом поясе из базы данных tz:

import pytz

tz = pytz.timezone('Europe/Berlin')
berlin_now = datetime.now(tz)

Он работает во время переходов DST. Он работает, если в часовом поясе было другое смещение UTC в прошлом, то есть оно работает, даже если временной интервал соответствует нескольким объектам tzinfo в разное время.