파이썬에서 에포크 이후의 초를`datetime` 객체로 어떻게 변환합니까?


248

time모듈은 시대 이후 초를 사용하여 초기화 할 수 있습니다 :

>>> import time
>>> t1=time.gmtime(1284286794)
>>> t1
time.struct_time(tm_year=2010, tm_mon=9, tm_mday=12, tm_hour=10, tm_min=19, 
                 tm_sec=54, tm_wday=6, tm_yday=255, tm_isdst=0)

datetime.datetime같은 방식으로 객체 를 초기화하는 우아한 방법이 있습니까?


답변:


404

datetime.datetime.fromtimestamp 시간대를 아는 경우와 동일한 결과를 얻을 수 있습니다. time.gmtime

>>> datetime.datetime.fromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 11, 19, 54)

또는

>>> datetime.datetime.utcfromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 10, 19, 54)

42
기괴하게 datetime.utcfromtimestamp순진한 타임 스탬프를 만듭니다. 나는에 있었다 import pytz사용 datetime.fromtimestamp(1423524051, pytz.utc)의식적 날짜를 만들 수 있습니다.
Matt

6
위의 후속 조치로 Python> = 3.2를 사용 pytz하면 UTC 타임 스탬프 만 원하는 경우 라이브러리 를 가져올 필요가 없습니다 . from datetime import datetime, timezone다음과 같이 호출하면됩니다 datetime.fromtimestamp(1423524051, timezone.utc). 에서 UTC 시간대 만 필요할 때 추가 라이브러리를 여러 번 저장했습니다 pytz.
phouse512

38

에포크부터 초 datetime까지 strftime:

>>> ts_epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'

datetime.fromtimestamp (1579366345) .strftime ( '% Y- % m- % d % H : % M : % S')
이어야합니다.

27

문서에서 신기원 이후 초부터 시간대를 인식하는 datetime 객체를 얻는 권장 방법은 다음과 같습니다.

파이썬 3 :

from datetime import datetime, timezone
datetime.fromtimestamp(timestamp, timezone.utc)

다음을 사용하여 Python 2pytz :

from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)

자막 문서 ( "Python 3", "Python 2")에 대한 링크가 유용 할 것입니다. 또한 순서를 변경하는 것이 좋습니다.
Adam Matan

업데이트되었습니다. 파이썬 문서와 일치하기 때문에 순서를 동일하게 유지하십시오.
Meistro

tzinfo 객체 pytz를 얻을 필요는 없습니다 utc. 스스로 만드는 것은 쉽다
jfs

9

datetime.datetime입니다. fromtimestamp (타임 스탬프) 및. 1970 년 1 월 1 일 이전의 날짜에 대해서는 utcfromtimestamp (타임 스탬프)가 창에서 실패하지만 음의 유닉스 타임 스탬프는 유닉스 기반 플랫폼에서 작동하는 것 같습니다. 문서는 다음과 같이 말합니다.

" 타임 스탬프가 플랫폼 C gmtime () 함수가 지원하는 값 범위를 벗어나면 ValueError가 발생할 수 있습니다. 1970 년에서 2038 년으로 제한되는 것이 일반적입니다 "

Issue1646728 도 참조하십시오


: o) 그렇습니다, 여전히 수정하는데 약 23 년
user3666197

5
을 사용 utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp)하여 해결할 수 있습니다.
jfs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.