Как использовать часовые пояса с объектом datetime в python?

Как правильно представить другой часовой пояс в моем часовом поясе? Приведенный ниже пример работает только потому, что я знаю, что EDT на час впереди меня, поэтому я могу раскомментировать вычитание myTimeZone ()

import datetime, re
from datetime import tzinfo

class myTimeZone(tzinfo):
    """docstring for myTimeZone"""
    def utfoffset(self, dt):
        return timedelta(hours=1)

def myDateHandler(aDateString):
    """u'Sat,  6 Sep 2008 21:16:33 EDT'"""
    _my_date_pattern = re.compile(r'\w+\,\s+(\d+)\s+(\w+)\s+(\d+)\s+(\d+)\:(\d+)\:(\d+)')
    day, month, year, hour, minute, second = _my_date_pattern.search(aDateString).groups()
    month = [
            'JAN', 'FEB', 'MAR', 
            'APR', 'MAY', 'JUN', 
            'JUL', 'AUG', 'SEP', 
            'OCT', 'NOV', 'DEC'
    ].index(month.upper()) + 1
    dt = datetime.datetime(
        int(year), int(month), int(day), 
        int(hour), int(minute), int(second)
    )                   
    # dt = dt - datetime.timedelta(hours=1)
    # dt = dt - dt.tzinfo.utfoffset(myTimeZone())
    return (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, 0, 0, 0)

def main():
    print myDateHandler("Sat,  6 Sep 2008 21:16:33 EDT")

if __name__ == '__main__':
    main()
 jfs01 янв. 2016 г., 03:29
Ваш конкретный формат даты / времени может быть обработан с помощьюemail.utils пакет stdlib:ts = mktime_tz(parsedate_tz('Sat, 6 Sep 2008 21:16:33 EDT'))
 juan06 сент. 2013 г., 00:19
Взгляни наthis answer, Надеюсь, поможет!

Ответы на вопрос(4)

>>> import time
>>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone
>>> offset / 60 / 60 * -1
-9

Возвращаемое значение находится в секундах к западу от UTC (области к востоку от UTC получают отрицательное значение). Это противоположно тому, как нам на самом деле это нравится, поэтому* -1.

localtime().tm_isdst будет равен нулю, если переход на летнее время в настоящее время не действует (хотя это может быть неправильно, если район недавно изменил свой закон о переходе на летнее время).

 09 июл. 2015 г., 02:15

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

 04 сент. 2014 г., 14:29
@ Prof.Falken: как бы вы изящно деградировали, если информация о часовом поясе недоступна (возбудить исключения, вернуть (возможно) неправильные результаты, оба)? кстати, смотритеPEP 431: Time zone support improvements
 24 сент. 2012 г., 16:17
Это недопустимая причина. Стандартная библиотека может использовать ресурсы на платформе, на которой она работает, если она доступна, и изящно ухудшаться, если история часовых поясов не найдена.
 04 сент. 2014 г., 14:45
@ J.F.Sebastian, я не знаю. Возникают исключения, но я не эксперт по Python. Мне просто кажется, что все может быть лучше, чем они есть. PEP 431 выглядит хорошим началом для меня.
 06 авг. 2012 г., 23:19
Это не объясняет, почему стандартная библиотека не может обрабатывать -500, хотя.

babel а такжеpytz при работе с часовыми поясами. Сохраняйте ваши внутренние объекты даты и времени наивными и в формате UTC и конвертируйте их в свой часовой пояс только для форматирования. Причина, по которой вам, вероятно, нужны наивные объекты (объекты без информации о часовом поясе), заключается в том, что многие библиотеки и адаптеры баз данных не имеют представления о часовых поясах.

Babel pytz
 11 авг. 2009 г., 09:46
Спасибо за рекомендацию Pytz.
 04 сент. 2014 г., 14:26
@JonCrowell: наивный объект datetime не имеет информации о часовом поясе. Вы можете интерпретировать его как время в любом часовом поясе (другими словами, это неоднозначно), включая UTC, например, вы можете2008-09-22 20:59:00 как время в UTC (это2008-09-22 13:59:00 PDT-0700).
 12 авг. 2013 г., 19:14
Также обратите внимание, что Babel находится на вершине pytz
 11 мар. 2014 г., 15:25
Разве это не противоречие, чтобы сказать «наивный и в UTC»?
 12 авг. 2013 г., 18:50
Пожалуйста, обновите ссылку Babel наbabel.pocoo.org    (как говорит старый сайт)

но Python берет отсечку часового пояса от We, строго. Вот почему я считаю, что в Python есть отрицательные ограничения по часовым поясам.

Ваш ответ на вопрос