Получить локальный часовой пояс системы в python

Кажется странным, но я не могу найти простой способ найти локальный часовой пояс, используя Pandas/pytz в Python.

Я могу сделать:

>>> pd.Timestamp('now', tz='utc').isoformat()
Out[47]: '2016-01-28T09:36:35.604000+00:00'
>>> pd.Timestamp('now').isoformat()
Out[48]: '2016-01-28T10:36:41.830000'
>>> pd.Timestamp('now').tz_localize('utc') - pd.Timestamp('now', tz='utc')
Out[49]: Timedelta('0 days 01:00:00')

Который даст мне часовой пояс, но это, вероятно, не лучший способ сделать это... Есть ли команда в pytz или pandas для получения системного часового пояса? (предпочтительно в python 2.7)

Ответ 1

Я не думаю, что это возможно с помощью pytz или pandas, но вы всегда можете установить python-dateutil или tzlocal:

from dateutil.tz import tzlocal
datetime.now(tzlocal())

или

from tzlocal import get_localzone
local_tz = get_localzone()

Ответ 2

time.timezone должно работать.

Смещение локального (не летнего) часового пояса в секундах к западу от UTC (отрицательный в большинстве стран Западной Европы, положительный в США, нулевой в Великобритании).

Деление на 3600 даст вам смещение в часах:

import time

print(time.timezone / 3600.0)

Это не требует каких-либо дополнительных библиотек Python.

Ответ 3

Хотя он не использует pytz/Pandas, другие ответы тоже не подходят, поэтому я решил опубликовать то, что я использую в mac/linux:

import subprocess
timezone = subprocess.check_output("date +%Z")

Преимущества перед другими ответами: учитывает переход на летнее время, не требует установки дополнительных библиотек.