않습니다 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 time
datetime이 기본적으로 타임 스탬프를 제공하는 이유는 무엇입니까? 밀리 초를 제거하십시오 –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]>