Временные метки Python и RFC 3339

Где я могу найти процедуру построения RFC 3339 времени?

3 ответа

Решение

Это было основано на примерах на странице 10 RFC. Единственное отличие состоит в том, что я показываю микросекунды из шести цифр, соответствующие временным меткам Google Диска.

from math import floor

def build_rfc3339_phrase(datetime_obj):
    datetime_phrase = datetime_obj.strftime('%Y-%m-%dT%H:%M:%S')
    us = datetime_obj.strftime('%f')

    seconds = datetime_obj.utcoffset().total_seconds()

    if seconds is None:
        datetime_phrase += 'Z'
    else:
        # Append: decimal, 6-digit uS, -/+, hours, minutes
        datetime_phrase += ('.%.6s%s%02d:%02d' % (
                            us,
                            ('-' if seconds < 0 else '+'),
                            abs(int(floor(seconds / 3600))),
                            abs(seconds % 3600)
                            ))

    return datetime_phrase

rfc3339 очень гибок - http://www.ietf.org/rfc/rfc3339.txt - он эффективно определяет целую кучу форматов. Вы можете генерировать почти все из них, просто используя стандартное форматирование времени Python - http://docs.python.org/3.3/library/datetime.html

однако есть одна странность, и они позволяют (это необязательно) : между часами и минутами в числовом смещении часового пояса (%z). Python не будет отображать это, поэтому, если вы хотите включить его, вам нужен python-rfc3339 или аналогичный.

для парсинга rfc3339, simple-date будет обрабатывать все форматы. но так как он использует процедуры печати Python, он не может обрабатывать : дело выше.

python-rfc3339 отлично работал для меня.

Другие вопросы по тегам