정수 타임 스탬프를 파이썬 날짜 / 시간으로 변환하는 방법


189

"1331856000000"과 같은 타임 스탬프가 포함 된 데이터 파일이 있습니다. 불행히도 형식에 대한 문서가 많지 않으므로 타임 스탬프 형식이 어떻게되는지 잘 모르겠습니다. 파이썬의 표준 datetime.fromordinal()datetime.fromtimestamp()다른 몇 가지를 시도 했지만 일치하는 것은 없습니다. 특정 숫자가 현재 날짜 (예 : 2012-3-16)와 일치하지만 그 이상은 아닙니다.

이 숫자를 어떻게로 변환 datetime합니까?

답변:


329

datetime.datetime.fromtimestamp()JavaScript와 같이 밀리 fromtimestamp()초 단위의 타임 스탬프를 가지고 있지만 유닉스 타임 스탬프 (초)를 예상 한다는 점을 제외하고는 정확합니다 .

그렇게하세요 :

>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)

결과는 다음과 같습니다.

>>> date
datetime.datetime(2012, 3, 16, 1, 0)

귀하의 질문에 대답합니까?

편집 : JF Sebastian 은 (float )로 진정한 나누기사용하도록 올바르게 제안했습니다 . 정확한 결과를 얻으려면 차이점이 중요하므로 내 대답을 변경했습니다. 차이점은 Python 2.x의 기본 동작에서 비롯되며, 연산자를 사용하여 나누면 항상 플로어 나누기 라고 하는 반환 됩니다 . 제수 (a )를 제수 ( float 로 표시 ) 또는 (또는 등)으로 바꾸면 나눗셈이 진정한 나눗셈이 됩니다. 파이썬 2.x는 반환 분할 에 의해 , 에 의해 ,1e31000int/intint1000int1e31000float(1000)1000.floatintfloatfloatintfloatfloat등을에 전달 된 타임 스탬프의 일부 소수 부가있는 경우 fromtimestamp()에있어서,이 방법의 결과는 (마이크로 숫자 등)이 소수 부분에 대한 정보를 포함한다.


13
진정한 나눗셈을 사용하십시오 :/ 1e3
jfs

@ JFSebastian : 당신은 완전히 정확합니다. 내 대답을 편집하고 왜 당신이 옳은지를 설명했습니다. 설명에 동의하지 않으면 알려주십시오.
Tadeck

@ manu-fatto : 그건 중요하지 않습니다. x * 0.001그리고 x / 1e3둘 다 동일하며, 그 차이는 표기법과 길이에 있습니다 (원래는 더 짧습니다). 어떤 사람들에게는 당신이 제안한 곱셈의 역수 ( 1/x) 를 곱하는 대신 실제로 숫자로 나누는 것이 더 명확 할 수 있습니다 . 그러나 다른 접근법을 제안 해 주셔서 감사합니다.
Tadeck

58
시간대를 고려하기 때문에이 기능은 위험합니다. utcfromtimestamp
Haim Bender를

12
@HaimBender 감사합니다! 귀하의 의견에 더 많은 관심을 기울여야 할 것 같습니다. fromtimestamp현지 시간으로 날짜와 시간을 utcfromtimestamp제공하면 UTC로 날짜와 시간을 제공합니다.
yusong
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.