Pytz США / Восток конвертирование меток времени назад и вперед - PullRequest
0 голосов
/ 27 февраля 2019

С веб-сайт времени и даты :

Generalized Time Zone in New York
ET  Eastern Time    UTC -5:00 / -4:00   Wed, 11:42:33

Time Zone Currently Being Used in New York
UTC -5  EST Eastern Standard Time   New York    Wed, 11:42:33

Time Zone Not Currently Being Observed in New York
UTC -4  EDT Eastern Daylight Time   10 Mar 2019

Таким образом, в основном нью-йоркское время - EST или EDT, в зависимости от того, какой период года мы находимся в настоящее время из-за экономии времени DayLight.

При использовании US / Eastern в pytz это относится к ET, EST или EDT ?.Учитывает ли это изменение времени EST / EDT?

Я использую этот код для получения меток времени начала и конца дня заданной даты по восточному времени:

    import datetime
    import pytz

    session = datetime.datetime.strptime('26/02/2019', '%d/%m/%Y')
    exchange_tz = pytz.timezone('US/Eastern')
    session_localized = exchange_tz.localize(session)

    _period1 = int((session_localized - datetime.datetime(1970, 1, 1, tzinfo=exchange_tz)).total_seconds())
    _period2 = int((session_localized - datetime.datetime(1970, 1, 1, tzinfo=exchange_tz)).total_seconds()) + 24*60*60

    >>> _period1
    1551139200
    >>> _period2
    1551225600

Я не уверен на 100%, что эти временные метки были сгенерированы правильно.Потому что, когда я пытаюсь преобразовать их обратно в локализованные даты, я получаю 1 час разницы:

    _exchange_tz = pytz.timezone('US/Eastern')
    _exchange_ts = _exchange_tz.localize( datetime.datetime.fromtimestamp(1551139200) )

    >>> str(_exchange_ts)
    '2019-02-26 01:00:00-05:00'

Что, насколько я понимаю, должно быть 2019-02-26 00:00:00.Что я делаю не так?

Я также прочитал в документации pytz , что функция normalize() должна использоваться при выполнении арифметического покрытия, но я не уверен, применимо ли это к этому случаю илинет.

1 Ответ

0 голосов
/ 27 февраля 2019

При использовании US/Eastern в pytz это относится к ET, EST или EDT ?.Учитывает ли это изменение времени EST / EDT?

Это идентификаторы часового пояса IANA (он же TZDB, Olson и т. Д.).US/Eastern является ссылкой / псевдонимом America/New_York.Оба корректно моделируют историю восточного часового пояса США, включая EST или EDT, в зависимости от того, когда они применимы.

Что касается вашего примера, отметка времени 1551139200 соответствует 2019-02-26T00:00:00Z (UTC).В восточном времени США это 2019-02-25T19:00:00-05:00.Это должен быть результат, который вы получите.Сначала вам нужно будет локализовать входное значение в UTC (или в случае UTC вы можете безопасно назначить tzinfo=pytz.utc).Затем используйте функцию astimezone для преобразования в US/Eastern.

...