Не могу понять, как правильно сделать следующее:

— У меня есть цикл, в котором обрабатываются данные.
— Данные из разных источников, на которые я повлиять не могу.
— Среди данных есть дата. В одних источниках она вида "Sat, 14 Mar 2009 19:21:00 GMT", в других — "Fri, 06 Mar 2009 21:05:36 +0300".
— Мне нужно получить дату в таком виде, чтобы с ней можно было работать, как с датой. Не в виде строки.

Хотелось бы как-то одной функцией парсить оба случая. Возможно ли это?
Первое, что приходит на ум - это решить в лоб, если видим 'GMT' подстроку, то это время по гринвичу насколько я понимаю т.е. отсекаем ' GMT' часть и пихаем в strptime, если же видим '\+0\d{3}' подстроку, то опять же отсекаем её и затем прибавляем/отнимаем к результату strptime нужное часовое смещение.
batteries included =)
import email.utils

s = "Sat, 14 Mar 2009 19:21:00 GMT"
s1 = "Fri, 06 Mar 2009 21:05:36 -0300"

print email.utils.parsedate_tz(s)
print email.utils.parsedate_tz(s1)

Last edited MonAMMSKEMSK0MarE_March+0300RMarAMMSK

Ух ты - круто. Интересно, а вот такое можно парсить из коробки?

Пт, 04 Июл 2008 19:02:06 +0200

Такое я нашёл в RSS выдаче одного блога. Я смотрел RFC и, насколько я понял, такие даты это вообще нарушение RFC.

import email.utils

s = "Sat, 14 Mar 2009 19:21:00 GMT"
s1 = "Fri, 06 Mar 2009 21:05:36 -0300"

print email.utils.parsedate_tz(s)
print email.utils.parsedate_tz(s1)


Спасибо! До такого я бы не додумался. Парсить время модулем для почты — это сильно. :-)
Интересно, а вот такое можно парсить из коробки?


Думаю можно, если поковырятся с локалью. В модуле locale - много всего в эту тему.

Last edited MonPMMSKEMSK0MarE_March+0300RMarPMMSK

Может быть, как-нить поковыряюсь. Я перед тем как пост написать попробовал выставить локаль в ru_RU и вызвал parsedate_tz - вернуло None.

Ух ты - круто. Интересно, а вот такое можно парсить из коробки?

Пт, 04 Июл 2008 19:02:06 +0200
Такое я нашёл в RSS выдаче одного блога. Я смотрел RFC и, насколько я понял, такие даты это вообще нарушение RFC.


Ну, если в лоб, то вырезать оттуда все буквы, а потом time.strptime по нужному формату.

Нельзя вырезать, дата мне тоже важна.

Может быть, как-нить поковыряюсь. Я перед тем как пост написать попробовал выставить локаль в ru_RU и вызвал parsedate_tz - вернуло None.

Да. сори parsedate_tz не канает. там свой парсер и в него все жестко забито.