В Python, как Вы находите, какое время UTC сместило компьютер, установлен на?
gmtime ()
вернет время в формате UTC, а localtime ()
вернет местное время, поэтому вычитание двух должно дать вам смещение utc.
import time
print -time.timezone
Он печатает смещение UTC в секундах (чтобы учесть летнее время (DST) см. time.altzone:
is_dst = time.daylight and time.localtime().tm_isdst > 0
utc_offset = - (time.altzone if is_dst else time.timezone)
где смещение utc определяется через: "Чтобы получить местное время, добавьте utc offset к utc time."
В Python 3.3+ есть tm_gmtoff
атрибут, если базовая библиотека C поддерживает его:
utc_offset = time.localtime().tm_gmtoff
Примечание: time.daylight
может дать неверный результат в некоторых крайних случаях.
tm_gmtoff
автоматически используется datetime, если он доступен в Python 3.3+:
from datetime import datetime, timedelta, timezone
d = datetime.now(timezone.utc).astimezone()
utc_offset = d.utcoffset() // timedelta(seconds=1)
Для получения текущего смещения UTC способом, обходящим time. daylight
и который работает даже если tm_gmtoff
недоступен, можно использовать предложение @jts о подструктурировании местного и UTC времени:
import time
from datetime import datetime
ts = time.time()
utc_offset = (datetime.fromtimestamp(ts) -
datetime.utcfromtimestamp(ts)).total_seconds()
Для получения смещения UTC для прошлых/будущих дат можно использовать pytz
таймзоны:
from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal
tz = get_localzone() # local timezone
d = datetime.now(tz) # or some other local date
utc_offset = d.utcoffset().total_seconds()
Это работает при переходе на DST, это работает для прошлых/будущих дат, даже если местный таймзон имел другое смещение UTC в то время, например. g., часовой пояс Европа/Москва в период 2010-2015 гг.