Преобразовать строку времени (со смещением часового пояса) в местное время. , ? питон - PullRequest
9 голосов
/ 20 июля 2010

Я пытаюсь преобразовать временную метку строки в правильный объект datetime. У меня проблема в том, что есть смещение часового пояса, и все, что я делаю, похоже, не работает.

В конечном итоге я хочу преобразовать строковую метку времени в объект datetime в часовом поясе моей машины.

# string timestamp     
date = u"Fri, 16 Jul 2010 07:08:23 -0700"

Ответы [ 3 ]

9 голосов
/ 20 июля 2010

Пакет dateutil удобен для анализа даты / времени:

In [10]: date = u"Fri, 16 Jul 2010 07:08:23 -0700"

In [11]: from dateutil.parser import parse

In [12]: parse(date)
Out[12]: datetime.datetime(2010, 7, 16, 7, 8, 23, tzinfo=tzoffset(None, -25200))

Наконец, чтобы преобразовать в ваш местный часовой пояс,

In [13]: parse(date).astimezone(YOUR_LOCAL_TIMEZONE)
5 голосов
/ 20 июля 2010

Похоже, datetime.datetime.strptime(d, '%a, %d %b %Y %H:%M:%S %z') должно работать, но согласно в этом отчете об ошибках существуют проблемы с обработкой %z.Так что вам, вероятно, придется обрабатывать часовой пояс самостоятельно:

import datetime

d = u"Fri, 16 Jul 2010 07:08:23 -0700"

d, tz_info = d[:-5], d[-5:]
neg, hours, minutes = tz_info[0], int(tz_info[1:3]), int(tz_info[3:])
if neg == '-':
    hours, minutes = hours * -1, minutes * -1

d = datetime.datetime.strptime(d, '%a, %d %b %Y %H:%M:%S ')
print d
print d + datetime.timedelta(hours = hours, minutes = minutes)
0 голосов
/ 07 июля 2015

Вот решение stdlib:

>>> from datetime import datetime
>>> from email.utils import mktime_tz, parsedate_tz
>>> datetime.fromtimestamp(mktime_tz(parsedate_tz(u"Fri, 16 Jul 2010 07:08:23 -0700")))
datetime.datetime(2010, 7, 16, 16, 8, 23) # your local time may be different

См. Также, Python: разбор даты с часовым поясом из электронного письма .

Примечание: fromtimestamp() может произойти сбой, если в прошлом часовом поясе было другое смещение UTC в прошлом (2010 г.) и , если он не использует базу данных хронологических часов на данной платформе. Чтобы исправить это, вы можете использовать tzlocal.get_localzone(), чтобы получить pytz объект tzinfo, представляющий ваш местный часовой пояс. pytz обеспечивает доступ к базе данных tz в переносном режиме:

>>> timestamp = mktime_tz(parsedate_tz(u"Fri, 16 Jul 2010 07:08:23 -0700"))
>>> import tzlocal # $ pip install tzlocal
>>> str(datetime.fromtimestamp(timestamp, tzlocal.get_localzone()))
'2010-07-16 16:08:23+02:00'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...