Парсинг даты с часовым поясом из электронного письма?

Вы попытались распечатать (Консоль. WriteLine ()) исключение в пункте выгоды, и не Visual Studio использования и запущенный Ваше приложение на консоли?

31
задан martineau 17 October 2016 в 06:56
поделиться

2 ответа

email.utils имеет функцию parsedate () для формата RFC 2822, который, насколько мне известно, не является устаревшим.

>>> import email.utils
>>> import time
>>> import datetime
>>> email.utils.parsedate('Mon, 16 Nov 2009 13:32:02 +0100')
(2009, 11, 16, 13, 32, 2, 0, 1, -1)
>>> time.mktime((2009, 11, 16, 13, 32, 2, 0, 1, -1))
1258378322.0
>>> datetime.datetime.fromtimestamp(1258378322.0)
datetime.datetime(2009, 11, 16, 13, 32, 2)

Обратите внимание, однако метод parsedate не принимает во внимание часовой пояс, а time.mktime всегда ожидает кортеж местного времени, как упоминалось здесь .

>>> (time.mktime(email.utils.parsedate('Mon, 16 Nov 2009 13:32:02 +0900')) ==
... time.mktime(email.utils.parsedate('Mon, 16 Nov 2009 13:32:02 +0100'))
True

Итак. вам все равно нужно будет проанализировать часовой пояс и учесть разницу во времени:

>>> REMOTE_TIME_ZONE_OFFSET = +9 * 60 * 60
>>> (time.mktime(email.utils.parsedate('Mon, 16 Nov 2009 13:32:02 +0900')) +
... time.timezone - REMOTE_TIME_ZONE_OFFSET)
1258410122.0
30
ответ дан 27 November 2019 в 21:49
поделиться

Вы пробовали

rfc822.parsedate_tz(date) # ?

Подробнее о RFC822, http://docs.python.org/library/rfc822.html

Он устарел (parsedate_tz теперь находится в ] email.utils.parsedate_tz ), хотя.

Но, может быть, эти ответы помогут:

2
ответ дан 27 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: