В Python, как вы находите, какое время UTC смещается на компьютер?
Получение смещения UTC компьютера в Python
Ответ 1
gmtime()
вернет время UTC, а localtime()
вернет местное время, поэтому вычитание двух должно дать вам смещение utc.
Ответ 2
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