Преобразуйте время RFC 3339 в стандартную метку времени Python

Существует ли простой способ преобразовать время RFC 3339 в регулярную метку времени Python?

У меня есть сценарий, который читает Atom-ленту, и я хотел бы смочь сравнить метку времени объекта в Atom-ленте ко времени изменения файла.

Я замечаю от спецификации ATOM, что даты ATOM включают смещение часового пояса (Z) но в моем случае нет ничего после Z таким образом, я предполагаю, что мы можем принять GMT.

Я предполагаю, что мог проанализировать время с regex каким-то, но я надеялся, что Python имел встроенный способ сделать его, что я просто не смог найти.

18
задан Mark Biek 6 June 2012 в 00:03
поделиться

5 ответов

Не построен, afaik.

feed.date.rfc3339 Это модуль библиотеки Python с функциями преобразования строк временных меток в формате RFC 3339 в значения Python с плавающей точкой времени, и наоборот. RFC 3339 - это формат метки времени, используемый в формате синдикации Atom feed.

Это BSD-лицензия.

http://home.blarg.net/~steveha/pyfeed.html

(Редактировано так, чтобы было понятно, что я не писал этого. :-)

.
10
ответ дан 30 November 2019 в 05:54
поделиться

feedparser.py обеспечивает надежный / расширяемый способ анализа различных форматов даты, которые могут встречаться в реальных потоках atom / rss:

>>> from feedparser import _parse_date as parse_date
>>> parse_date('1985-04-12T23:20:50.52Z')
time.struct_time(tm_year=1985, tm_mon=4, tm_mday=12, tm_hour=23, tm_min=20,
                 tm_sec=50, tm_wday=4, tm_yday=102, tm_isdst=1)
5
ответ дан 30 November 2019 в 05:54
поделиться

Вы не включаете пример, но если у вас нет Z-смещения или часового пояса, и вы предполагаете, что вам не нужны длительности, а только основное время, то, возможно, вам это подойдет:

import datetime as dt
>>> dt.datetime.strptime('1985-04-12T23:20:50.52', '%Y-%m-%dT%H:%M:%S.%f')
datetime.datetime(1985, 4, 12, 23, 20, 50, 520000)

Функция strptime() была добавлена в модуль datetime на Python 2.5, так что некоторые люди еще не знают, что она там есть.

Редактирование: Функция time.strptime() существует уже некоторое время и работает примерно так же, чтобы выдавать значение struct_time:

>>> ts = time.strptime('1985-04-12T23:20:50.52', '%Y-%m-%dT%H:%M:%S.%f')
>>> ts
time.struct_time(tm_year=1985, tm_mon=4, tm_mday=12, tm_hour=23, tm_min=20, tm_sec=50, tm_wday=4, tm_yday=102, tm_isdst=-1)
>>> time.mktime(ts)
482210450.0
23
ответ дан 30 November 2019 в 05:54
поделиться

http://pypi.python.org/pypi/iso8601/, похоже, в состоянии разобрать iso 8601, в котором RFC 3339 является подмножеством, может быть, это может быть полезным, но опять же, не встроенным.

.
8
ответ дан 30 November 2019 в 05:54
поделиться

http://bugs.python.org/issue15873 (дубликат http://bugs.python.org/issue5207 )

Похоже, что встроенного пока нет.

6
ответ дан 30 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: