문제

변환하는 쉬운 방법이 있습니까? RFC 3339 일반 파이썬 타임 스탬프로 시간을 보내십니까?

원자 피드를 읽는 스크립트가 있으며 원자 피드의 항목의 타임 스탬프를 파일 수정 시간과 비교할 수 있습니다.

나는 원자 사양, 그 원자 날짜는 시간대 오프셋을 포함합니다 (Z<a number>)하지만 제 경우에는 그 이후에 아무것도 없습니다. Z 그래서 우리는 GMT를 가정 할 수 있다고 생각합니다.

나는 어떤 종류의 정규식으로 시간을 구문 분석 할 수 있다고 생각하지만 Python이 내가 찾을 수 없었던 내장 방법을 갖기를 바랐다.

도움이 되었습니까?

해결책

내장 없음, Afaik.

feed.date.rfc3339이것은 타임 스탬프 문자열을 RFC 3339 형식으로 변환하기위한 함수가있는 Python 라이브러리 모듈이며, 그 반대도 마찬가지입니다. RFC 3339는 원자 공급 신디케이트 형식에서 사용하는 타임 스탬프 형식입니다.

BSD 라이센스입니다.

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

(편집됨에 따라 글을 쓰지 않았다는 것이 분명합니다. :-)

다른 팁

예를 포함하지는 않지만 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 () 함수는 Python 2.5의 DateTime 모듈에 추가되었으므로 일부 사람들은 아직 그것이 있다는 것을 알지 못합니다.

편집하다: Time.strpTime () 함수는 한동안 존재했으며 구조적 _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

http://pypi.python.org/pypi/iso8601/ RFC 3339가 하위 집합 인 ISO 8601을 구문 분석 할 수있는 것 같습니다.

rfc3339 datetime 형식으로 많은 어려움을 겪었지만 date_string <=> dateTime_Object를 양방향으로 변환하는 데 적합한 솔루션을 찾았습니다.

두 가지 외부 모듈이 필요합니다. 그 중 하나는 한 방향으로 만 변환을 수행 할 수 있기 때문입니다 (불행히도).

첫 번째 설치 :

sudo pip install rfc3339
sudo pip install iso8601

그런 다음 포함 :

import datetime     # for general datetime object handling
import rfc3339      # for date object -> date string
import iso8601      # for date string -> date object

어떤 방향이 어떤 방향인지 기억할 필요가 없기 때문에 두 가지 간단한 도우미 기능을 썼습니다.

def get_date_object(date_string):
  return iso8601.parse_date(date_string)

def get_date_string(date_object):
  return rfc3339.rfc3339(date_object)

코드 내부에서 다음과 같이 쉽게 사용할 수 있습니다.

input_string = '1989-01-01T00:18:07-05:00'
test_date = get_date_object(input_string)
# >>> datetime.datetime(1989, 1, 1, 0, 18, 7, tzinfo=<FixedOffset '-05:00' datetime.timedelta(-1, 68400)>)

test_string = get_date_string(test_date)
# >>> '1989-01-01T00:18:07-05:00'

test_string is input_string # >>> True

heureka! 이제 쉽게 할 수 있습니다 () 사용 가능한 형식으로 날짜 문자열과 날짜 문자열을 사용하십시오.

http://bugs.python.org/issue15873 (복제 http://bugs.python.org/issue5207 )

아직 내장 된 것이없는 것 같습니다.

FeedParser.py 실제 원자/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)

Django를 사용하는 경우 Django의 기능을 사용할 수 있습니다. parse_datetime:

>>> from django.utils.dateparse import parse_datetime
>>> parse_datetime("2016-07-19T07:30:36+05:00")
datetime.datetime(2016, 7, 19, 7, 30, 36, tzinfo=<django.utils.timezone.FixedOffset object at 0x101c0c1d0>)

이것을 시도해보십시오. 그것은 나에게 잘 작동합니다

datetime_obj =  datetime.strptime("2014-01-01T00:00:00Z", '%Y-%m-%dT%H:%M:%SZ')

또는

datetime_obj = datetime.strptime("Mon, 01 Jun 2015 16:41:40 GMT", '%a, %d %b %Y %H:%M:%S GMT')

Python 3을 사용하면 Regex를 사용하여 RFC 3339 타임 스탬프를 구성 요소로 나눌 수 있습니다. 그런 다음 DateTime 객체를 직접 작성하면 추가 모듈이 필요하지 않습니다.

import re
import datetime

def parse_rfc3339(dt):
    broken = re.search(r'([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(\.([0-9]+))?(Z|([+-][0-9]{2}):([0-9]{2}))', dt)
    return(datetime.datetime(
        year = int(broken.group(1)),
        month = int(broken.group(2)),
        day = int(broken.group(3)),
        hour = int(broken.group(4)),
        minute = int(broken.group(5)),
        second = int(broken.group(6)),
        microsecond = int(broken.group(8) or "0"),
        tzinfo = datetime.timezone(datetime.timedelta(
            hours = int(broken.group(10) or "0"),
            minutes = int(broken.group(11) or "0")))))

이 예제는 "0"으로 타임 존 또는 마이크로 초를 누락했지만 추가 오류 확인이 필요할 수 있습니다. 건배, 알렉스

RFC3339 라이브러리 : http://henry.precheur.org/python/rfc3339

굉장한 것을 만났습니다 dateUtil.parser 다른 질문에서 모듈을 사용하여 RFC3339 문제에서 시도해 보았으며,이 질문에서 다른 응답이 더 정신적으로 처리 된 모든 것을 처리하는 것으로 보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top