Как анализировать, например, 2010-04-24T07: 47: 00.007 + 02: 00 с Python strptime - PullRequest
2 голосов
/ 16 октября 2010

Кто-нибудь знает, как проанализировать формат, как описано в заголовке, используя метод Pythons strptime?

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

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

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

ОБНОВЛЕНИЕ

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

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

Ответы [ 4 ]

5 голосов
/ 16 октября 2010

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

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

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

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

0 голосов
/ 16 октября 2010

Если вы пытаетесь проанализировать каналы RSS или Atom, используйте Универсальный анализатор каналов . Он поддерживает много форматов даты / времени .

>>> 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)
0 голосов
/ 16 октября 2010

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

0 голосов
/ 16 октября 2010

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

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

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

...