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

В Python, как Вы находите, какое время UTC сместило компьютер, установлен на?

47
задан Michael Currie 9 July 2015 в 18:01
поделиться

2 ответа

gmtime () вернет время в формате UTC, а localtime () вернет местное время, поэтому вычитание двух должно дать вам смещение utc.

29
ответ дан 26 November 2019 в 19:28
поделиться

time.timezone:

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 гг.

81
ответ дан 26 November 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: