gmtime ()의 시간 + 날짜 출력에서 ​​신기원 이후 초를 얻는 방법은 무엇입니까?


162

gmtime()시간 + 날짜를 넣고 초 수를 얻는 위치 를 어떻게 반대로 합니까?

와 같은 문자열 'Jul 9, 2009 @ 20:02:58 UTC'이 있으며 신기원과 2009 년 7 월 9 일 사이의 시간 (초)을 되찾고 싶습니다.

시도 time.strftime했지만 올바르게 사용하는 방법 또는 올바른 명령인지 잘 모르겠습니다.

답변:


123

검색 엔진이 유닉스 타임 스탬프를 얻는 방법이라고 말했기 때문에 여기에 오 셨다면이 답변 읽기를 중단하십시오. 아래로 스크롤하십시오.

당신이 반전하고 싶다면 time.gmtime(), 당신은 원한다 calendar.timegm().

>>> calendar.timegm(time.gmtime())
1293581619.0

을 사용하여 문자열을 time.strptime()시간 튜플로 바꿀 수 있습니다 calendar.timegm().

>>> import calendar
>>> import time
>>> calendar.timegm(time.strptime('Jul 9, 2009 @ 20:02:58 UTC', '%b %d, %Y @ %H:%M:%S UTC'))
1247169778

캘린더 모듈에 대한 자세한 내용은 여기를 참조하십시오.


16
현재 유닉스 시대를 찾고 있다면 @ DanJ의 의견이나 naren의 답변을 참조하십시오.이 답변은 잘못되었습니다!
kosii

641

시간 모듈을 사용하십시오 .

epoch_time = int(time.time())

14
@DanJ : Epoch (고정 시간) 이후 경과 된 시간 (초)이며 모든 시간대에서 동일합니다. 비록 윤초 주위의 시간 인스턴스를 무시한다면; timeUnix epoch (1970)를 사용 하면 UTC로 쉽게 변환 할 수 있습니다.
jfs

43
이것은 OP가 요구 한 것이 아니라 내가 원했던 것입니다. +1입니다.
fearless_fool

6
그것은 "신기원부터 시간을 얻는다"라는 제목의 질문에 대한 답이다. +1
AlejandroVD

@ JFSebastian 이것은 초를 획기적으로 만듭니다. 위의 동일한 답변을 사용하여 최대 밀리 초까지 해상도를 얻으려면 어떻게해야합니까?
Marlon Abeykoon

2
위의 내 의견 을 확장하려면 : time.time()값은 현지 시간대에 의존하지 않습니다 (예 : "올바른"시간대 등을 제외하는 경우). 예를 들어 POSIX 시간을 반환하면 (대부분의 시스템에서와 같이) SI 이후의 초 수입니다 Epoch (1970-01-01UTC)는 윤초를 계산하지 않습니다. 이 값 UTC (윤초 제외)로 변환 수 있지만 UTC가 아닙니다 . @MarlonAbeykoon : 나는 이 답변을
jfs

10

참고 time.gmtime타임 스탬프 매핑 01970-1-1 00:00:00.

In [61]: import time       
In [63]: time.gmtime(0)
Out[63]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

time.mktime(time.gmtime(0)) 로케일에 따라 달라지는 시간 소인이 표시되며 일반적으로 0이 아닐 수 있습니다.

In [64]: time.mktime(time.gmtime(0))
Out[64]: 18000.0

반대의 time.gmtimecalendar.timegm다음과 같습니다.

In [62]: import calendar    
In [65]: calendar.timegm(time.gmtime(0))
Out[65]: 0

이것은 time.mktime (현재 시간대를 고려한)에 대한 더 나은 설명과 예를 제공합니다.
Jkm

@Jkm : mktime()와 함께 사용하지 마십시오 gmtime(). 현지 시간mktime() 은 받아들이지 만 UTC 시간 은 반환 합니다. 현지 시간대는 다를 수 있습니다. "로케일과 관련된 타임 스탬프"는 의미가 없습니다. POSIX 타임 스탬프는 사용자의 로케일 (현지 시간대)에 의존하지 않습니다. 전 세계에서 동일한 값입니다. "에포크 이후 초"는 대부분의 경우 POSIX 타임 스탬프입니다 (Windows에서도). TAI 타임 스케일을 사용하는 "올바른"시간대와 같은 것은 일반적이지 않습니다. Python의 time.time ()이 로컬 또는 UTC 타임 스탬프를 반환합니까?를 참조하십시오 . gmtime()
jfs

@JF Sebastian 당신이 옳습니다. 사실 mktime()최근에 몇 가지 문제가 있습니다. 일부 파이썬 웹 서버 (예 : 토네이도)의 경우 프로세스가 계속 실행되기 때문에 시스템 로캘을 변경하더라도 mktime()웹 서버 API 에서 호출하는 것은 여전히 기존 시간대 를 사용하여 시간 객체를 생성합니다. gmtime()gmt 오프셋으로 전환 하고 수동으로 적용해야합니다.
Jkm

5
ep = datetime.datetime(1970,1,1,0,0,0)
x = (datetime.datetime.utcnow()- ep).total_seconds()

이것은와 달라야 int(time.time())하지만 다음과 같은 것을 사용하는 것이 안전합니다x % (60*60*24)

datetime — 기본 날짜 및 시간 유형 :

시간 모듈과 달리 날짜 시간 모듈은 윤초를 지원하지 않습니다.


3
t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")

어떤 이유로 strptime에 액세스 할 수 없습니다. 날짜 시간을 가져 왔습니다
calccrypto

1
@calccrypto 당신은 from datetime import datetime또는해야한다datetime.datetime.strptime
pathikrit

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.