2016-10-18 11 views
0

シンプルなタイムシートスクリプトを作成したいと思います。私の入力ファイルは次のようになりますPythonで時間を加算したり減算する方法

9:00 17:00 
10:45 12:35 
11:00 15:00 

私はそれを読んで、1日あたりの作業時間を計算し、それらの時間を合計したいと思います。 1日が12:00前に始まって13:00以降に終わったとき、私は昼休みに30分を差し引きたい。これまで

私の試みは、次のとおりです。

import sys 
from datetime import datetime 

gap = datetime.strptime('00:30','%H:%M') 
hours = [] 
for line in sys.stdin: 
    (start_time,end_time) = line.split() 
    start_time = datetime.strptime(start_time, '%H:%M') 
    end_time = datetime.strptime(end_time, '%H:%M') 
    #if start_time before 12:00 and end_time after 13:00 then subtract gap 
    hours.append(end_time-start_time)  
print sum(hours) 

私はif文の行が動作するようにして時間を合計すると、あなたは日時を合計することができないのいずれかとして動作するようには思えない取得する方法がわかりません。 timedeltaタイプ。


コメントのリンクのおかげで、sum(hours)をreduce(operator.add、hours)に置き換えることができます。

残りの部分は、start_timeが12:00より前でend_timeが13:00より後であるかどうかをテストする方法です。そうであれば、timedeltaを30分短縮する方法です。

+3

などの基本的な操作を使用することができます見てみましょう:http://stackoverflow.com/questions/13897246/python-time-subtraction – Fusseldieb

+0

そして、ここで:http://stackoverflow.com/questions/3096953/difference-between-two-time-intervals-in-python – Fusseldieb

+0

@Fusseldieb私はあなたのリンクを見てくれてありがとう。 reduce(operator.add、hours)は時間を追加する方法です。 ifステートメントとギャップ減算はどのようにして行いますか? – eleanora

答えて

1

if文で間違ったコード(および構文)を使用しています。

if start_time < datetime.strptime('12:00', '%H:%M') and end_time > datetime.strptime('13:00', '%H:%M'): 
    delta_hours = end_time.hour - start_time.hour) 
    delta_minutes = end_time.minutes - start_time.minutes) 
    # Do whatever your want with it now. 
    # Substraction of the break is not implemented in this example, it depends on how you want to save it. 

​​も同様に見て価値があるかもしれない、それは

a = timedelta(...) 
b = timedelta(...) 
c = b - a - gap 
関連する問題