유닉스 타임 스탬프 형식으로 현재 GMT 시간을 얻는 가장 쉬운 방법은 무엇입니까?


175

파이썬은 (다른 패키지 제공 datetime, time, calendar)로 볼 수있다 여기를 시간을 처리하기 위해. 현재 GMT 시간을 얻기 위해 다음을 사용하여 큰 실수를했습니다.time.mktime(datetime.datetime.utcnow().timetuple())

유닉스 타임 스탬프에서 현재 GMT 시간을 얻는 간단한 방법은 무엇입니까?


1
입력 / 출력이란 무엇입니까? datetime.utcnow()현재 UTC 시간을 datetime 객체로 반환합니다 ( "GMT 시간"에 대해 이야기 할 때 UTC를 원한다고 가정합니다). time.time()유닉스 타임 스탬프를 부동 수로 직접 반환합니다. UTC로 시간을 나타내는 datetime.date/datetime.datetime을 POSIX timestamp로 변환하는 방법은 다음과 같습니다 .
jfs

제안 된 방법이 잘못되었거나 너무 장황합니까? 관련 : stackoverflow.com/questions/15940280/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

왜 방법이 실수였습니까?
skeller88

답변:


230

시대 이후 초 단위로 타임 스탬프를 얻으려면 time.time ()을 사용합니다.

import time

time.time()

산출:

1369550494.884832

대부분의 플랫폼에서 표준 CPython 구현의 경우 UTC 값을 반환합니다.


21
문제는 컴퓨터의 로컬 시계가 UTC가 아닐 수 있다는 것입니다.
9000

@ 9000 : 맞습니다. 시간이 문제가되는 모든 환경에서 항상 UTC를 고집합니다. 그리고 그는 가장 간단한 해결책을 요구했습니다. Linux, BSD, Mac OS X 및 Windows를 포함한 최신 플랫폼에서 CPython을 사용하면 time.time ()에 대해 UTC가 모두 반환됩니다. 이는 이러한 OS에서 C 표준 라이브러리의 시간 함수 동작을 반영합니다.
에드몬드 버넷

66
@ 9000 : 현지 시간대는 중요하지 않습니다. 유닉스 시간은 UTC 시간에 해당합니다 (윤초 주위의 시간을 무시하는 경우). 타임 스탬프는 에포크 (고정 시간) 이후 경과 된 시간 (초)입니다. 왜 타임 존 머신의 로컬 시계가 사용하는지에 따라 달라지는 이유는 무엇입니까? 주어진 순간에 유닉스 시간은 전 세계에서 동일합니다. (알 수없는) 일부 플랫폼은 다른 시대를 사용할 수 있지만 그 값은 여전히 ​​현지 시간대에 의존하지 않습니다.
jfs


125
import time

int(time.time()) 

산출:

1521462189

42

도움이 되나요?

from datetime import datetime
import calendar

d = datetime.utcnow()
unixtime = calendar.timegm(d.utctimetuple())
print unixtime

Python UTC 날짜 / 시간 객체를 UNIX 타임 스탬프로 변환하는 방법


@Cairnarvon 이것은 단지 예일뿐입니다. 현재 타임 스탬프를 원하면 간단히 전화 time.time()하여 날짜 / 시간 변환이 필요하지 않습니다.
Messa

1
FWIW : UTC 시간이 아니라 UTC로 현지 시간으로 변환되었습니다. UTC로 타임 스탬프를 얻으려면 다른 것을해야합니다.
Sherlock70

18

또는 단순히 날짜 시간 표준 모듈을 사용하여

In [2]: from datetime import timezone, datetime
   ...: int(datetime.now(tz=timezone.utc).timestamp() * 1000)
   ...: 
Out[2]: 1514901741720

원하는 해상도에 따라 자르거나 곱할 수 있습니다. 이 예는 밀리 초를 출력합니다.

적절한 Unix 타임 스탬프 (초) 를 원하는 경우* 1000


당신은 매우 구체적으로 코드를 작성하여 시간을 정수로 강요하므로 출력 텍스트가 왜 10 진수인지 혼란 스럽습니다.
Weston

내 나쁜, 나중에 int 캐스팅을 추가
Maresh

이것은 Javascript moment라이브러리 와 정확히 동일 moment().utc().valueOf()합니다. 정확히 내가 찾던 것. 감사합니다
azhar22k

UNIX 타임 스탬프는 1970 년 이후 몇 초가 되어야합니다 . 솔루션에서이를 생성하지 않습니다.
skyking

1
"원하는 해상도에 따라 잘라내거나 곱할 수 있습니다"* 1000 부분을 떨어 뜨리면 몇 초가 걸립니다.
Maresh

18

python2python3

시간 모듈을 사용하는 것이 좋습니다

import time
int(time.time())

1573708436

datetime 모듈을 사용할 수도 있지만 strftime ( '% s')을 사용할 때 strftime은 시간을 현지 시간으로 변환합니다!

python2

from datetime import datetime
datetime.utcnow().strftime('%s')

python3

from datetime import datetime
datetime.utcnow().timestamp()

2
UTC + 1이기 때문에, time.time()그리고 datetime.utcnow().timestamp()않습니다 하지 동일한 값을 줘!
user136036

또한 두 번째 옵션이 올바른 것으로 예상했지만 UTC + 1100의 올바른 값을 얻으려면 datetime.now (). timestamp ()를 사용해야했습니다. 타임 스탬프 ()가 제대로 작동 할 것으로 예상했지만 작동하지 않는 것 같습니다
David Waterworth

더 자세히 살펴보면 datetime.utcnow () 및 datetime.now ()는 순진 날짜 시간 (tzinfo 없음)을 반환하며 timestamp ()는 tzinfo = null 일 때 로컬로 가정합니다.
David Waterworth

2

나는이 방법을 좋아한다 :

import datetime, time

dts = datetime.datetime.utcnow()
epochtime = round(time.mktime(dts.timetuple()) + dts.microsecond/1e6)

여기에 게시 된 다른 방법은 모든 플랫폼에서 UTC를 제공한다고 보장하지는 않지만 전체 초 만보 고합니다. 전체 해상도를 원한다면 마이크로 초까지 작동합니다.


1
불행히도 UTC + 0000 시간대가 아닌 한 UTC를 제공하지 않는 것 같습니다. utctimetuple대신에 사용 하는 것이 속임수입니다.
skyking 2012 년

1
from datetime import datetime as dt
dt.utcnow().strftime("%s")

산출:

1544524990

이것은 time.time()나와 동일하지 않습니다 .
Alwinius

1
시간대 정보없이를 dt.utcnow반환하기 때문일 수 datetime있습니다. 그런 다음 이 현지 시간 strftime이라고 가정합니다 datetime.
skyking 2012 년

1
@skyking 이것은이 페이지의 거의 모든 답변에 대한 문제입니다.
David Waterworth

1
#First Example:
from datetime import datetime, timezone    
timstamp1 =int(datetime.now(tz=timezone.utc).timestamp() * 1000)
print(timstamp1)

출력 : 1572878043380

#second example:
import time
timstamp2 =int(time.time())
print(timstamp2)

출력 : 1572878043

  • 여기에서 첫 번째 예제는 두 번째 예제보다 정확한 시간을 제공합니다.
  • 여기에 첫 번째를 사용하고 있습니다.

1

적어도 python3에서는 다음과 같이 작동합니다.

>>> datetime.strftime(datetime.utcnow(), "%s")
'1587503279'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.