timedelta를 총 초로 변환


186

나는 시차가있다

time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1

이제 경과 한 총 시간 (초)을 어떻게 찾습니까? diff.seconds일을 계산하지 않습니다. 난 할 수 있습니다:

diff.seconds + diff.days * 24 * 3600

이를위한 내장 방법이 있습니까?


8
@RestRisiko-당신이 맞아요. 여전히 스택 오버플로에 대한 질문을하는 것이 유용하므로 다음에 나 또는 다른 사람이 Google에 대해 가장 좋은 결과를 얻을 수 있습니다.
ripper234

우리는 "좋은"의 대안적인 정의를 나중에 논의 할 수 있습니다. 당신이 도망 가기 전에 내 대답을 읽으십시오 :)
John Machin

컴퓨팅 time1diff코드 에는 여러 가지 문제가 있습니다. 현재 utc 시간을 순진한 datetime 객체로 가져 오려면 datetime.utcnow()대신 사용하십시오. 차이를 찾기 위해 현지 시간 대신 UTC를 사용해야하는 이유를 이해하려면 날짜 시간 사이에 24 시간이 지난 경우 찾기-Python을 참조하십시오 . time.monotonic()이벤트 사이에 경과 시간을 찾는 것이 좋습니다 ( time.time()또는 대신 datetime.utcnow()).
jfs

답변:


384

사용하십시오 timedelta.total_seconds().

>>> import datetime
>>> datetime.timedelta(seconds=24*60*60).total_seconds()
86400.0

26
Python 2.7의 새로운 기능
Evgeny

7
누군가 2.6과 여전히 호환되어야하는 경우 : 새로운 방법으로 datetime.timedelta를 확장하는 방법에 대해서는 stackoverflow.com/questions/3318348/… 을 참조 하십시오.
Uwe Geuder

6
Python3.6의 datetime.timedelta.total_seconds (time2-time1)
Russo

8

당신은 표현에 문제가 있습니다 datetime.datetime.fromtimestamp(time.mktime(time.gmtime())).

(1) 두 순간의 차이가 초 단위로 필요한 경우 매우 간단 time.time()합니다.

(2) 다른 목적으로 해당 타임 스탬프를 사용하는 경우 결과 전체에 큰 냄새가 나기 때문에 수행중인 작업을 고려해야합니다.

gmtime()UTC 로 시간 튜플을 반환 하지만 현지 시간mktime() 으로 시간 튜플을 기대합니다 .

저는 표준 TZ가 UTC + 10 인 호주 멜버른에 있지만 일광 절약은 내일 아침까지 계속 적용되므로 UTC + 11입니다. 다음을 실행할 때 현지 시간은 2011-04-02T20 : 31 였고 UTC는 2011-04-02T09 : 31이었습니다.

>>> import time, datetime
>>> t1 = time.gmtime()
>>> t2 = time.mktime(t1)
>>> t3 = datetime.datetime.fromtimestamp(t2)
>>> print t0
1301735358.78
>>> print t1
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=9, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=0) ### this is UTC
>>> print t2
1301700663.0
>>> print t3
2011-04-02 10:31:03 ### this is UTC+1
>>> tt = time.time(); print tt
1301736663.88
>>> print datetime.datetime.now()
2011-04-02 20:31:03.882000 ### UTC+11, my local time
>>> print datetime.datetime(1970,1,1) + datetime.timedelta(seconds=tt)
2011-04-02 09:31:03.880000 ### UTC
>>> print time.localtime()
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=20, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=1) ### UTC+11, my local time

t3의 표현 결과는 UTC + 1이며 UTC + (나의 로컬 DST 차이)로 나타납니다 ...별로 의미가 없습니다. datetime.datetime.utcnow()DST가 켜지거나 꺼질 때 한 시간 씩 뛰지 않는 것을 사용 하는 것이 좋습니다.time.time()


설명해 주셔서 감사합니다. 내가 지금 사용하고있는 목적을 위해, 지금도 몇 시간의 차이가 있어도 중요하지 않지만, 앞으로 더 의미있는 것을 쓸 때이를 확인해야합니다.
ripper234

-7

mx.DateTime 모듈을 사용할 수 있습니다

import mx.DateTime as mt

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