않습니다 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라이브러리를 사용하여 문자열을 사람이 읽을 수있는 문자열 로 변환했습니다 .
import timedatetime이 기본적으로 타임 스탬프를 제공하는 이유는 무엇입니까? 밀리 초를 제거하십시오 –str(datetime.datetime.now()).split('.')[0]
time.time()가 시간대에 없습니다 . "에포크 이후의 초"는 용어입니다. 특정 시점 (에포크) 이후 경과 된 시간 (초) 이 아닙니다 . 현지 시간 (tz 데이터베이스 사용) 및 / 또는 UTC 시간대로 쉽게 변환 할 수 있습니다. btw, .strftime()결과 를 삭제 하면 (거의) 동일한 (+/- 마이크로 초)입니다.
텍스트 파일에서 사용할 수 있는 타임 스탬프 의 텍스트 형식입니다 . (과제의 질문 제목은 과거에 다르므로이 답변에 대한 소개가 시간으로 해석 될 수있는 방법을 명확히하기 위해 변경되었습니다. [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
import datetime; print "%s: My timestamp message" % datetime.datetime.utcnow()Python3 :import datetime; print ("%s: My timestamp message" % datetime.datetime.utcnow())
datetime.datetime.utcnow()악하다. 현지 시간이 아닌 순진한 날짜 시간을 만듭니다. 현지 시간이 UTC가 아닌 한 잘못되었습니다. datetime.datetime.now(datetime.timezone.utc)대신 사용하십시오 . 현재 시간을 나타내는 시간대 인식 날짜 시간을 작성합니다.
#squiguy의 답변을 기반으로 진정한 타임 스탬프를 얻으려면 float에서 캐스트하십시오.
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
적어도 그것이 개념입니다.
type(time.time())제공<type 'float'>
int()다형성입니다. long이전 Python 버전에서 필요한 경우 반환 됩니다. 모든 정수는 새로운 Python 버전입니다.
대답은 둘 다 또는 둘 다일 수 있습니다.
none : time.time()Epoch 이후 경과 된 시간 (초)을 반환합니다. 결과는 시간대에 의존하지 않으므로 UTC 또는 현지 시간이 아닙니다. 다음 은 "에포크 이후 두 번째"에 대한 POSIX 정의입니다 .
둘 다 : time.time()시스템의 시계가 동기화 될 필요가 없으므로 값을 반영합니다 (현지 시간대와 아무런 관련이 없지만). 컴퓨터마다 다른 결과가 동시에 나타날 수 있습니다. 반면에 컴퓨터 시간 이 동기화되면 타임 스탬프에서 UTC 시간을 쉽게 얻을 수 있습니다 (윤리 초를 무시하는 경우).
from datetime import datetime
utc_dt = datetime.utcfromtimestamp(timestamp)다양한 Python 버전에서 UTC 시간에서 타임 스탬프를 얻는 방법은 UTC에 따라 에포크 이후 날짜를 초로 변환하려면 어떻게합니까?를 참조하십시오.
time.time()함수가 무엇을 반환 하는지에 관한 것 입니다 (매우 짧습니다). 귀하의 의견은 다른 질문을 다룹니다 (답변을 시작한 이후로 귀하의 의견이 변경되었습니다. 따로 메모; "올바른"이라는 단어는 드물게 사용해야합니다 (시간대는 복잡합니다. 은색 글 머리 기호는 없으며 특정 사용 사례에 대한 타협점 만 있음).
datetime.datetime.utcfromtimestamp(ts). 현지 시간이 UTC가 아닌 한 현지 시간이 아닌 순진한 날짜 시간을 만들기 때문에 잘못되었습니다. datetime.datetime.fromtimestamp(ts,datetime.timezone.utc)대신 사용하십시오 . 타임 스탬프와 동일한 순간을 나타내는 시간대 인식 날짜 시간을 만듭니다.
naive_dt.astimezone()하지 않는 것처럼 존재하지 않는 것을 선호합니다 bytes.encode(). 많은 경우 내부에서 UTC 시간으로 작업하는 것이 유리합니다. datetime 모듈에 대해 말할 수있는 많은 것들이 있습니다 (골드 배지를 얻기 위해 충분한 질문에 대답했습니다) time.time().
특정 시간대에는 "에포크"와 같은 것이 없습니다. 신기원은 특정 시점으로 잘 정의되어 있으므로 시간대를 변경하면 시간 자체도 변경됩니다. 구체적으로이 시간은 Jan 1 1970 00:00:00 UTC입니다. 따라서 time.time()에포크 이후 초 수를 반환합니다.
타임 스탬프는 항상 utc의 시간이지만 호출 datetime.datetime.fromtimestamp 하면이 타임 스탬프에 해당하는 현지 시간대로 시간이 반환되므로 결과는 로캘에 따라 다릅니다.
>>> import time, datetime
>>> 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 시간대를 사용하여 시간 객체를 반환합니다.
>>> import arrow
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>