В Python, как узнать, какое смещение времени UTC установлено для компьютера?
7 ответов
gmtime()
вернет время UTC, а localtime()
вернет местное время, поэтому вычитание этих двух значений даст вам смещение utc.
import time
print -time.timezone
Он печатает смещение UTC в секундах (для учета летнего времени (DST) см. время .altzone :
is_dst = time.daylight and time.localtime().tm_isdst > 0
utc_offset = - (time.altzone if is_dst else time.timezone)
Где смещение utc определяется через: «Чтобы получить местное время, добавьте смещение utc к времени utc».
В Python 3.3+ есть tm_gmtoff
атрибут if Базовая библиотека 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()
Он работает во время переходов на летнее время, он работает для прошлых / будущих дат, даже если местный часовой пояс имел различное смещение UTC во время, например, часовой пояс Европа / Москва в период 2010-2015 годов.
Мне нравится:
>>> strftime('%z')
'-0700'
Сначала я попробовал ответ JTS, но он дал неверный результат. Я сейчас в -0700, но там говорилось, что я в -0800. Но мне нужно было сделать какое-то преобразование, прежде чем я мог получить что-то, что мог вычесть, поэтому, возможно, ответ был скорее неполным, чем неправильным.
Это работает для меня:
if time.daylight > 0:
return time.altzone
else:
return time.timezone
Вот некоторый код на python3 с указанием даты и времени в качестве импорта. НТН
>>> 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'
Создание метки времени 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
hours_delta = (time.mktime(time.localtime()) - time.mktime(time.gmtime())) / 60 / 60
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.