2016-07-01 8 views
0

시간을 계산하는 중에 다음 오류가 발생합니다. 해결 방법은 무엇입니까?시간을 계산하는 동안 오류가 발생했습니다.

from datetime import datetime, date 
import time 
print "Start : %s" % time.ctime() 
start_time = time.ctime() 
#do something 
print "How to calculate time diff?" 
end_time = time.ctime() 
total_elapsed_time = datetime.combine(date.today(), end_time) - datetime.combine(date.today(), start_time) 
print "TOTAL ELAPSED TIME" + str(total_elapsed_time) 

오류 : -

Traceback (most recent call last): 
    File "time_diff.py", line 8, in <module> 
    total_elapsed_time = datetime.combine(date.today(), end_time) - datetime.combine(date.today(), start_time) 
TypeError: combine() argument 2 must be datetime.time, not str 
+0

'time.ctime()'1 05 문자열'금 7월을 반환 : 16:25 2016'이면 diff를 계산할 수 없습니다. –

+0

@RajeshYogeshwar - 좋아요, 어떻게 diff를 계산하고 이해할 수있는 형식으로 인쇄합니까? – user2125827

+0

datetime 인스턴스가 있어야합니다. datetime 인스턴스를 사용하면 차이를 계산 한 후 사람이 읽을 수있는 형식으로 표시 할 수 있습니다. –

답변

1

우선 3 가지 데이터 유형이 혼합되어 있으므로 근본적으로 잘못된 것입니다.

(표준 lib 디렉토리에서 두) 파이썬에서 두 개의 (기본)하는 방법을 방법 및 저장 시간이 있습니다

  1. 타임 스탬프 - 다수 - 당신은 time 모듈을 가져, 다음 time.time()float를 반환은 초의 시간을 초 단위로 비교하면 숫자가 더 크면 부동 소수점 숫자를 비교하는 것과 같습니다. 미래를 나타내는 시간은 미래 숫자이고, 날짜 간의 차이도 숫자입니다 (날짜 간 초 수를 나타냄). 분, 시간 등을 60, 3600 등으로 나눠서 변환하면 간단합니다.
  2. datetime 개체는 사용자가 조작 할 수있는 개체를 가져 오기 위해 타임 스탬프보다 작업이 훨씬 쉽습니다.이 개체는 사람이 읽을 수있는 형식으로 변환되므로 모든 비교 연산자가 작동하고 날짜 (date2- date1)은 datetime.timedelta으로 반환됩니다. 여기서 일, 초 및 밀리 초를 추출 할 수 있습니다.

그래서 코드에서 당신은 사용할 수 있습니다

타임 스탬프 :

import time 

date1 = time.time() 
print 'Start time: %s' % time.ctime(date1) 
... 
date2 = time.time() 
print 'End time: %s' % time.ctime(date2) 

print 'Time it took: %0.2f seconds' % (date2 - date1) 

날짜

from datetime import datetime 

date1 = datetime.now() 
print 'Start time: %s' % date1 
... 
date2 = datetime.now() 
print 'End time: %s' % date2 

print 'Time it took: %s' % (date2 - date1) 
0

time.ctime()는 그이 오류의 원인, 문자열을 반환합니다.

See Python time.ctime

로 time.time()는 당신이 찾고있는 아마 :

See Python ticks

+0

time.time()을 사용하여 이미 시도했습니다. TypeError : combine() 인수 2는 반드시 datetime.time이어야하며 부동 상태 여야합니다. – user2125827

+0

http://stackoverflow.com/a/31882919/3900773 – WSimpson

2

오류는 분명히 (결합의 인수 2) datetime.time를해야한다고.

d = datetime.now() 
timepart = d.time() 
datepart = d.date() 
datetime.combine(datepart, timepart) 
0

귀하의 START_TIME 및 END_TIME은 문자열입니다

당신은 같은 것을입니다 datetime.time의 인스턴스를 가져야한다. 또한 datetime.combine에는 datetime.time 객체로 두 번째 인수가 있어야합니다. 당신의 time.ctime은 날짜와 연도 정보도 반환합니다. 먼저 시간 정보 만 추출한 다음 datetime.time 객체로 변환하십시오.

import datetime 
import time 
#store at start time 
a=datetime.datetime.strptime(time.ctime(), "%a %b %d %H:%M:%S %Y") 
#store at end time 
b=datetime.datetime.strptime(time.ctime(), "%a %b %d %H:%M:%S %Y") 
print b-a 

@Jerzyk가 지적한 것처럼, 당신이 그것을 표시하지 않으려면 구문 분석 할 필요가 없습니다 : 그런 다음 ctime이를 사용하여 시작 시간과 종료 시간을 모두 저장할 수 있습니다

은 같은 것을 할 특정 형식. 그래서 양자 택일로, 당신은 할 수 :

a=datetime.datetime.now() 
b=datetime.datetime.now() 
print b-a 

이 원하는 방식으로 결과를 표시하기 위해 구문 분석 할 수있는 datetime.timedelta를 반환합니다.

+0

이 솔루션은 의미가 없습니다. 왜 타임 스탬프를 문자열로 변환 한 다음 구문을 분석합니까? 말장난은 매우 비쌉니다. datetime 또는 timestamp로 시간을 저장 한 다음 필요한 경우에만 변환하여 솔루션으로 마킹해서는 안됩니다. 그런 접근 방식을 사용하는 누군가에게 새로운 것이기 때문에. – Jerzyk

+0

당신이 맞습니다. 다른 방법으로, 또는보다 효율적으로 datetime.datetime.now()를 시작 날짜와 종료 날짜 둘 다에 사용하여 차이를 계산할 수 있습니다. 이것은 timedelta 객체를 반환 할 것이고, 필요할 때마다 문자열로 포맷 될 수 있습니다. 나는 이것을 포함하도록 나의 대답을 편집 할 것이다. 감사 ! – Salander

+0

내 강한 의견을 드려서 죄송합니다. 그러나 솔루션은 다른 로케일에서 작동하지 않습니다. ctime 출력은 활성 로켈에 따라 다르므로 구문 분석 패턴이 일치하지 않습니다. 올바르게 수행하는 유일한 방법은 타임 스탬프 또는 datetime 개체를 사용하는 것입니다. – Jerzyk

1
from datetime import datetime, timedelta 

def calc(): 
    s = datetime.now() 
    e = datetime(day=21, month=7, year=2016, hour=12, minute=0) 

    diff = e - s 

DIFF 지금 datetime.timedelta 인스턴스입니다. 이 인스턴스에는 일, 초, 마이크로 초 및 total_seconds 이름으로 기능과 같은 속성이 있습니다.

추 신 : 이것은 단지 참조 용입니다. 솔루션을 얻는 데 도움이되기를 바랍니다.

관련 문제