Как узнать местное время, используя utcoffset и название страны в Python - PullRequest
0 голосов
/ 06 мая 2011

У меня есть названия стран и utcoffset этой страны Как узнать местное время в этой стране, используя utcoffset?

Ответы [ 5 ]

4 голосов
/ 06 мая 2011

Проверьте pytz для поиска часовых поясов по местоположению. Может быть, что-то вроде этого:

>>> import pytz, datetime
>>> pytz.country_timezones['de']
['Europe/Berlin']
>>> matching_tzs = [t for t in pytz.country_timezones['de'] if pytz.timezone(t)._utcoffset.total_seconds() == 3600]
>>> datetime.datetime.now(tz=pytz.timezone(matching_tzs[0]))
datetime.datetime(2011, 5, 6, 17, 5, 26, 174828, tzinfo=<DstTzInfo 'Europe/Berlin' CEST+2:00:00 DST>)
1 голос
/ 02 декабря 2013

Страна может охватывать несколько часовых поясов. Смещение utc для места может изменяться во времени.

Учитывая код страны и смещение utc, вы можете попытаться найти соответствующий часовой пояс из базы данных Olson tz для текущего времени. Вот вариант ответа @ Mu Mind , который учитывает текущее время (в противном случае результат может быть неожиданным для некоторых часовых поясов):

from datetime import datetime, timedelta
import pytz

country_code, utc_offset = 'de', timedelta(hours=1)

# find matching timezones and print corresponding local time
now_in_utc = datetime.now(pytz.utc)
for zonename in pytz.country_timezones[country_code]:
    tz = pytz.timezone(zonename)
    local_time = now_in_utc.astimezone(tz)
    if tz.utcoffset(local_time) == utc_offset: #NOTE: utc offset depends on time
       print("%s\t%s" % (tz.zone, local_time.strftime("%Y-%m-%d %H:%M:%S %Z%z")))

выход

Europe/Berlin   2013-12-02 20:42:49 CET+0100
1 голос
/ 06 мая 2011

вызов datetime.now() с часовым поясом (как tzinfo объект) в качестве аргумента.

0 голосов
/ 09 мая 2011

рабочий код

utcoffset='+5:30'
utctime=datetime.datetime.utcnow()      
hr=utcoffset[0:utcoffset.find(':')]
min=utcoffset[utcoffset.find(':')+1:]
datetimeofclient=datetime.timedelta(hours=int(hr),minutes=int(min))
0 голосов
/ 06 мая 2011

Сохраните текущее TZ значение переменной окружения, а затем выполните

>>> os.environ['TZ'] = 'US/Eastern'
>>> time.tzset()

А для библиотеки, какую бы функцию времени вы не использовали для часового пояса США / Восточной Америки, вы можете позже вернуть ее к исходной.

Пример использования:

>>> time.strftime('%X %x %Z')
'22:54:11 05/06/11 SGT'
>>> os.environ['TZ'] = 'US/Eastern'
>>> time.strftime('%X %x %Z')
'10:54:30 05/06/11 EDT'

Пожалуйста, обратитесь к модулю времени документация для примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...