Хранение RSS pubDate в хранилище данных App Engine - PullRequest
0 голосов
/ 20 декабря 2011

PubDate в ленте RSS имеет формат:

2011-12-19T01: 56: 28-06: 00

2011-10-19T06: 11:02 + 00: 00

Как мне преобразовать это в общий часовой пояс, чтобы я мог сохранить его в db.DateTimeProperty () и сортировать элементы по дате, независимо от часового пояса?

1 Ответ

3 голосов
/ 20 декабря 2011

Это вариант формата даты-времени ISO8601. Это моя функция для разбора таких дат:

from datetime import datetime, timedelta

def parse_iso8601_datetime(dtstr, loose=False):
    """
    Convert ISO8601 datetime string and return Python datetime.datetime.
    Specify loose=True for more relaxed parsing accepting eg "YYYY-MM-DD" format.

    Raise ValueError on malformed input.
    """
    dt = None
    if len(dtstr) == 19:    # (eg '2010-05-07T23:12:51')
        dt = datetime.strptime(dtstr, "%Y-%m-%dT%H:%M:%S")
    elif len(dtstr) == 20:  # (eg '2010-05-07T23:12:51Z')
        dt = datetime.strptime(dtstr, "%Y-%m-%dT%H:%M:%SZ")
    elif len(dtstr) == 25:  # (eg '2010-05-07T23:12:51-08:00')
        dt = datetime.strptime(dtstr[0:19], "%Y-%m-%dT%H:%M:%S")
        tzofs = int(dtstr[19:22])
        dt = dt - timedelta(hours=tzofs)
    else:
        if loose:
            if len(dtstr) == 10:  # (eg '2010-05-07')
                dt = datetime.strptime(dtstr, "%Y-%m-%d")
        if not dt:
            raise ValueError("Invalid ISO8601 format: '%s'" % dtstr)
    return dt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...