2016-09-20 1 views
0

저는 1474398821633L과 같은 타임 스탬프를 가지고 있습니다. 나는 그것이 만료되었는지를 확인하기 위해 datetime.datetime.now()와 비교하려고한다. ValueError: timestamp out of range for platform localtime()/gmtime() functiondatetime.now()와 파이썬으로 utc timestamp를 비교하십시오. 2.7

내가 무엇을 할 수 : 나는 타임 스탬프에서 날짜 개체를 만들려고이 오류가 발생했습니다 그러나

나는 파이썬 2.7

from datetime import datetime 

timestamp = 1474398821633L 
now = datetime.now() 

if datetime.utcfromtimestamp(timestamp) < now: 
    print "timestamp expired" 

을 사용하고?

답변

1

@mgilson pointed out 귀하의 의견은 "기원 이후 경과 한 초"가 아닌 "밀리 초"입니다.

대신 사용 datetime.now()time.time() : 당신이 datetime이 필요하면

import time 

if time.time() > (timestamp_in_millis * 1e-3): 
    print("expired") 

다음 datetime.utcnow() 대신 datetime.now() 사용합니다. 지역 시간을 순수 datetime 객체로 반환하는 .now()을 순 비교 datetime 객체로 UTC 시간을 반환하는 utcfromtimestamp()과 비교하지 마십시오. 이는 섭씨와 화씨를 직접 비교하는 것과 같습니다. 즉, 먼저 동일한 단위로 변환해야합니다.

from datetime import datetime 

now = datetime.utcnow() 
then = datetime.utcfromtimestamp(timestamp_in_millis * 1e-3) 
if now > then: 
    print("expired") 

Find if 24 hrs have passed between datetimes - Python에서 자세한 내용을 참조하십시오.

3

은 타임 스탬프가 밀리 초 단위 인 것처럼으로 보입니다. 파이썬은 초 타임 스탬프를 사용

>>> datetime.datetime.utcfromtimestamp(1474398821.633) 
datetime.datetime(2016, 9, 20, 19, 13, 41, 633000) 

즉, 적절한 범위를 얻기 위해 1000.하여 타임 스탬프를 분할해야 할 수 있습니다.

또한 datetime.now() 대신 datetime.utcnow()을 비교하여 올바르게 시간대를 처리하는지 확인하십시오.

+1

@BelowtheRadar - 추측 컨대 :-). 내가 알고있는 다른 언어 (예 : 자바 스크립트)는 밀리 초 단위로 작업하는 경향이 있으므로 초 시간 스탬프가 아니라 밀리 초 타임 스탬프 인 경우 시간 범위가 범위를 벗어날 수 있습니다. – mgilson

+0

밀리 초로 해석하는 것으로는 충분하지 않습니다. OP는'datetime.now()'에 의해 반환 된 현지 시간 대신에 UTC 시간을 사용해야합니다. – jfs

+0

@ J.F.Sebastian - 좋은 지적입니다. – mgilson

관련 문제