Конвертировать местное время в GMT на Python - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть программа, которая получает строку даты и времени по местному времени (Израиль), и мне нужно преобразовать ее в секунды эпохи.

Я мог бы использовать такой формат, как "UTC +02: 00"Я думаю, но проблема в том, что при дневной экономии часы Israels ведут себя иначе, чем в других странах.Есть ли способ получить время эпохи в зависимости от страны?

Ответы [ 4 ]

5 голосов
/ 07 ноября 2011
> import pytz
> pytz.country_timezones['il'] # Israel

['Asia/Jerusalem']

Описывает ли это ваш часовой пояс?

Если да, тогда вы можете использовать:

from datetime import datetime
import pytz

a = "2011-11-07 12:34:56"
dt = pytz.timezone('Asia/Jerusalem').localize(datetime.strptime(a, '%Y-%m-%d %H:%M:%S')).astimezone(pytz.utc)

dt сейчас datetime.datetime(2011, 11, 7, 10, 34, 56, tzinfo=<UTC>), что "2011-11-07 12:34:56 "(в Иерусалиме).

Чтобы преобразовать его в секунды эпохи (метка времени Unix, т.е. секунды с 1970-01-01 00:00:00 UTC), вы можете напрямуюиспользовать:

import calendar
from datetime import datetime
import pytz

a = "2011-11-07 12:34:56"
epoch = calendar.timegm(pytz.timezone('Asia/Jerusalem').localize(datetime.strptime(a, '%Y-%m-%d %H:%M:%S')).utctimetuple())

# epoch is 1320662096
0 голосов
/ 07 ноября 2011

Чтобы узнать, нужно ли настраивать летнее время, используйте:

time.daylight

Мне кажется, это работает:

>>> time.gmtime(time.mktime(time.strptime("7 Nov 2011 12:12:12", "%d %b %Y %H:%M:%S")))
time.struct_time(tm_year=2011, tm_mon=11, tm_mday=7, tm_hour=19, tm_min=12, tm_sec=12, tm_wday=0, tm_yday=311, tm_isdst=0)
0 голосов
/ 07 ноября 2011

Да, есть. Модуль pytz включает в себя базу данных Олсона политических часовых поясов и позволяет вам создавать объект местного времени и выполнять преобразование между часовыми поясами. Вы ищите часовые пояса по имени. UTC составляет Etc/UTC.

0 голосов
/ 07 ноября 2011

Python не содержит никаких встроенных классов часовых поясов, кроме базового класса tzinfo, который бесполезен.Вам необходимо установить другой пакет, например pytz .

. Обратите внимание, что у вас будут проблемы с неоднозначным локальным временем, когда меняется летнее время, когда одно и то же время происходит дважды.Всегда лучше, если вы можете хранить и передавать время в формате UTC и конвертировать только при отображении.Я понимаю, что это не всегда возможно.

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