development

파이썬의 time.time ()은 로컬 또는 UTC 타임 스탬프를 반환합니까?

big-blog 2020. 2. 11. 22:33
반응형

파이썬의 time.time ()은 로컬 또는 UTC 타임 스탬프를 반환합니까?


않습니다 time.time()파이썬 시간 모듈에서 시스템의 시간 또는 UTC에서 시간을 반환?


time.time()함수는 에포크 이후 초 수를 초 단위로 반환합니다. "epoch"는 1970 년 1 월 1 일의 시작으로 UTC로 정의됩니다. 따라서이 에포크 (epoch)는 UTC로 정의되며 글로벌 시간을 설정합니다. "epoch 지난 시간"(time.time ())이 어디에 있든지 같은 순간에 같은 값을 반환합니다.

다음은 컴퓨터에서 실행 한 일부 샘플 출력이며 문자열로 변환합니다.

Python 2.7.3 (default, Apr 24 2012, 00:00:54) 
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>

ts변수는 초 단위로 반환되는 시간입니다. 그런 다음 datetime라이브러리를 사용하여 문자열을 사람이 읽을 수있는 문자열 로 변환했습니다 .


텍스트 파일에서 사용할 수 있는 타임 스탬프텍스트 형식입니다 . (과제의 제목은 과거에 달라졌으므로이 답변에 대한 소개가 시간으로 해석 될 수있는 방법을 명확히하기 위해 변경되었습니다. [업데이트 2016-01-14]

당신은 사용하여 문자열로 타임 스탬프를 얻을 수 있습니다 .now()또는 .utcnow()의를 datetime.datetime:

>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000

now에서 다릅니다 utcnow: 그렇지 않으면 같은 방식으로 작동 - 예상대로

>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000

타임 스탬프를 문자열에 명시 적으로 렌더링 할 수 있습니다.

>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'

또는 타임 스탬프의 형식을 원하는 방식으로 명시 적으로 지정할 수 있습니다.

>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'

ISO 형식을 원하면 .isoformat()객체 방법을 사용하십시오 .

>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'

변환없이 계산 및 인쇄를 위해 변수에이를 사용할 수 있습니다.

>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print ts
2015-04-21 12:02:19.209915
>>> print tf
2015-04-21 12:02:30.449895
>>> print te
0:00:11.239980

#squiguy의 답변을 기반으로 진정한 타임 스탬프를 얻으려면 float에서 캐스트하십시오.

>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318

적어도 그것이 개념입니다.


대답은 둘 다 또는 둘 다일 수 있습니다.

  • none : time.time()Epoch 이후 경과 된 시간 (초)을 반환합니다. 결과는 시간대에 의존하지 않으므로 UTC 또는 현지 시간이 아닙니다. 다음 은 "에포크 이후 두 번째"에 대한 POSIX 정의입니다 .

  • 둘 다 : time.time()시스템의 시계가 동기화 될 필요가 없으므로 값을 반영합니다 (현지 시간대와 아무런 관련이 없지만). 컴퓨터마다 다른 결과가 동시에 나타날 수 있습니다. 반면에 컴퓨터 시간 동기화되면 타임 스탬프에서 UTC 시간을 쉽게 얻을 수 있습니다 (윤리 초를 무시하면).

    from datetime import datetime
    
    utc_dt = datetime.utcfromtimestamp(timestamp)
    

다양한 Python 버전에서 UTC 시간에서 타임 스탬프를 얻는 방법은 UTC에 따라 에포크 이후 날짜를 초로 변환하려면 어떻게합니까?를 참조하십시오.


나는 결국 정착했다.

>>> import time
>>> time.mktime(time.gmtime())
1509467455.0

특정 시간대에는 "에포크"와 같은 것이 없습니다. 신기원은 특정 시점으로 잘 정의되어 있으므로 시간대를 변경하면 시간 자체도 변경됩니다. 구체적으로이 시간은 Jan 1 1970 00:00:00 UTC입니다. 따라서 time.time()에포크 이후 초 수를 반환합니다.


타임 스탬프는 항상 utc의 시간이지만 호출 datetime.datetime.fromtimestamp하면이 타임 스탬프에 해당하는 현지 시간대로 시간이 반환되므로 결과는 로캘에 따라 다릅니다.

>>> import time, datetime, arrow

>>> time.time()
1564494136.0434234

>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)

arrow다른 행동을 가진 멋진 도서관 이 있습니다. 같은 경우 UTC 시간대를 사용하여 시간 객체를 반환합니다.

>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>

참고 URL : https://stackoverflow.com/questions/13890935/does-pythons-time-time-return-the-local-or-utc-timestamp



반응형