2010-10-15 3 views
2

Кто-нибудь знает, как разбирать формат, как описано в заголовке, используя метод strythime Pythons?Как разобрать, например. 2010-04-24T07: 47: 00.007 + 02: 00 с Python strptime

У меня есть что-то похожее на это:

import datetime  
date = datetime.datetime.strptime(entry.published.text, '%Y-%m-%dT%H:%M:%S.Z') 

Я не могу показаться, чтобы выяснить, какие TIMEFORMAT это. Кстати, я новичок на языке Python (я привык к C#).

UPDATE

Это, как я изменил код, основанный на советовании (ответы) ниже:

from dateutil.parser import * 
from datetime import * 
date = parse(entry.published.text) 

ответ

5

Эта дата в ISO 8601, или, более конкретно, RFC 3339, формат.

Такие даты не могут быть проанализированы strptime. Там есть Python issue, который обсуждает это.

dateutil.parser.parse может обрабатывать самые разные даты, в том числе и в вашем примере.

Если вы используете внешний модуль для синтаксического анализа XML или RSS, возможно, существует рутина для анализа этой даты.

-1

Это стандартный формат XML DATETIME, ISO 8601. Если вы уже используете XML библиотека, большинство из которых имеют встроенные анализаторы даты и времени. xml.utils.iso8601 работает достаточно хорошо.

import xml.utils.iso8601 
date = xml.utils.iso8601.parse(entry.published.text) 

Вы можете посмотреть на кучу других способов справиться с этим здесь: http://wiki.python.org/moin/WorkingWithTime

+1

"XML-библиотека". Который из? Вы имеете в виду PyXML? – snapshoe

+0

Большинство библиотек XML включают удобные функции для синтаксического анализа времени XML. В качестве примера я включил PyXML. –

0

Вот хороший способ, чтобы найти ответ: с помощью strftime, построить строку формата, которая будет излучать то, что вы видите , Эта строка будет по определению быть строкой, необходимой для PARSE с strptime.

0

Если вы пытаетесь разобрать RSS или Atom-каналы, используйте Universal Feed Parser. Он поддерживает many date/time formats.

>>> import feedparser     # parse feed 
>>> d = feedparser.parse("http://stackoverflow.com/feeds/question/3946689") 
>>> t = d.entries[0].published_parsed # get date of the first entry as a time tuple 
>>> import datetime 
>>> datetime.datetime(*t[:6])   # convert time tuple to datetime object 
datetime.datetime(2010, 10, 15, 22, 46, 56)