В Python, как вы находите, какое время UTC смещение компьютера установлено?Получение UTC смещения компьютера в Python
ответ
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 к времени utc. "
В Python 3.3+ есть tm_gmtoff
attribute, если базовая библиотека C поддерживает его:
utc_offset = time.localtime().tm_gmtoff
Примечание: time.daylight
может дать неправильный результат в some edge cases.
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's suggestion в substruct местного и 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 период.
Это красиво и чисто. – Rockallite
Супер полезно. Спасибо, J.F. –
Обратите внимание, что 'total_seconds()' доступно только в Python 3.2+. – mattst
мне нравится:
>>> strftime('%z')
'-0700'
Я первый попытался ответить JTS», но он дал мне неправильный результат. Сейчас я в -0700, но он говорил, что я был в -0800. Но я должен был сделать какое-то преобразование, прежде чем я смог бы получить что-то, что мог бы вычесть, поэтому, возможно, ответ был более неполным, чем неправильным.
''% z'' не поддерживается Python (он может работать на некоторых системах, где скорее всего вы можете использовать 'time.localtime(). Tm_gmtoff' вместо этого, чтобы получить смещение utc как число, а не строку). Результат («% z'') должен быть идентичным с ответом @jts. Включите ваш код, если вы думаете иначе. – jfs
импорта время time0 = time.time() utc_time = time.mktime (time.gmtime (time0)) LOCAL_TIME = time.mktime (time.localtime (time0)) смещение = LOCAL_TIME - utc_time печати (смещение/(60 * 60)) Дает -8. – dstromberg
1. не помещайте код в комментарии, обновляйте свой ответ вместо 2. неверно использовать mktime() здесь, используйте 'calendar.timegm()' или 'datetime()', чтобы найти разницу – jfs
Вот несколько кодов 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'
Это работает для меня:
if time.daylight > 0:
return time.altzone
else:
return time.timezone
это неверен. Обратите внимание: ['time.localtime(). Tm_isdst> 0' в аналогичном коде в моем ответе] (http://stackoverflow.com/a/3168394/4279) – jfs
Жаль, ваше сообщение так долго и полно, что я не понял, что это тот же ответ. Мой пост - это, конечно, более короткая версия того же решения. – Alecs
нет, код неправильный. 'time.daylight' не говорит, является ли сейчас летнее время. В нем говорится, что местное время может иметь DST. Вот почему вы должны называть 'time.localtime(). Tm_isdst' – jfs
- 1. Значение смещения UTC Python
- 2. Получение UTC смещения системного часового пояса на Mac (C++)
- 3. получение смещения часовой пояс в секундах в Python
- 4. Дата создания без смещения UTC
- 5. Moment.Js: Даты смещения с использованием UTC и смещения временной зоны
- 6. Получение часовой пояс UTC в формате UTC +/-
- 7. Получение имени компьютера Windows, запускающего скрипт python?
- 8. Как получить временные смещения UTC с геолокации
- 9. ZonedDateTime дает неверные значения смещения UTC
- 10. Как преобразовать строку с UTC смещения
- 11. Treetop: получение смещения узла
- 12. Получение позиции смещения якоря
- 13. Получение позиции/смещения элемента
- 14. Получение неопределенного смещения 1
- 15. Матрица смещения в Python
- 16. Получение UTC смещение Задан
- 17. Получение аудиовыхода компьютера
- 18. Получение пользователей компьютера
- 19. Python: Как преобразовать временную метку UTC в python utc datetime?
- 20. Получение SQLAlchemy для возврата времени в UTC
- 21. Получение часового пояса в виде смещения UTC для окон и linux
- 22. C++: Получение текущего времени в виде строки времени UTC UTC
- 23. Преобразование Twitter DateTime в Localtime с добавлением смещения UTC
- 24. Получить даты, когда изменение смещения UTC в конкретном часовом поясе
- 25. Конвертировать javascript Date() в UTC и время смещения
- 26. Определение смещения часового пояса времени UTC в .Net
- 27. Использование getUTCHours и добавление смещения UTC в javascript
- 28. Вставка UTC-смещения datetime в SQL меняет время - Почему?
- 29. Получить ярлык часового пояса на основе смещения UTC в Java
- 30. Javascript: получение текущей даты в миллисекундах (UTC) (без использования строк)
Brilliant! Мне нужно научиться думать просто :) – Paul
Это немного элегантная простота прямо здесь. –
Вычитание их дает 'TypeError: неподдерживаемый тип операндов для -: 'time.struct_time' и 'time.struct_time''. Что вы на самом деле имели в виду? – rakslice