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

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

Ответ 1

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

Ответ 2

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 offset определяется через: "Чтобы получить локальное время, добавьте utc offset в utc time."

В Python 3.3+ есть атрибут tm_gmtoff, если базовая библиотека C поддерживает его:

utc_offset = time.localtime().tm_gmtoff

Примечание: time.daylight может привести к неправильному результату в некоторых случаях кромки.

tm_gmtoff используется автоматически по дате, если он доступен на 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()

Он работает во время перехода на летнее время, он работает для прошлых/будущих дат, даже если у локального часового пояса было другое смещение по UTC в то время, например, по времени Европа/Москва в период 2010-2015 годов.

Ответ 3

Мне нравится:

>>> strftime('%z')
'-0700'

Сначала я попробовал ответить JTS, но это дало мне неправильный результат. Сейчас я в -0700, но он говорил, что я был в -0800. Но мне нужно было сделать какое-то преобразование, прежде чем я смог бы получить что-то, что мог бы вычесть, поэтому, возможно, ответ был более неполным, чем неверным.

Ответ 4

Создание метки времени Unix с часовым поясом с коррекцией UTC

Эта простая функция поможет вам получить текущее время из объекта date базы данных MySQL/PostgreSQL.

def timestamp(date='2018-05-01'):
    return int(time.mktime(
        datetime.datetime.strptime( date, "%Y-%m-%d" ).timetuple()
    )) + int(time.strftime('%z')) * 6 * 6

Пример вывода

>>> timestamp('2018-05-01')
1525132800
>>> timestamp('2018-06-01')
1527811200

Ответ 5

hours_delta = (time.mktime(time.localtime()) - time.mktime(time.gmtime())) / 60 / 60

Ответ 6

Вот несколько кодов python3 с просто datetime и time as import. НТН

>>> from datetime import datetime
>>> import time
>>> def date2iso(thedate):
...     strdate = thedate.strftime("%Y-%m-%dT%H:%M:%S")
...     minute = (time.localtime().tm_gmtoff / 60) % 60
...     hour = ((time.localtime().tm_gmtoff / 60) - minute) / 60
...     utcoffset = "%.2d%.2d" %(hour, minute)
...     if utcoffset[0] != '-':
...         utcoffset = '+' + utcoffset
...     return strdate + utcoffset
... 
>>> date2iso(datetime.fromtimestamp(time.time()))
'2015-04-06T23:56:30-0400'

Ответ 7

Это работает для меня:

if time.daylight > 0:
        return time.altzone
    else:
        return time.timezone