解説
重なった時間を二重に足していない?AIの稼働時間集計を区間で検算しよう
三つの作業の合計135分と、どれかが動いていた105分は別の数字。重複する時間帯をまとめ、集計対象と境界を明示した依頼文を作る。

AIへ作業時間の一覧を渡したら、合計135分になった。でも、同時に動いていた時間を二重に足したくなかった。作業ごとの時間の合計と、どれか一つでも動いていた時間は、違う集計になるよ。
今回は同じ日の架空の三つの作業で比べる。AIモデルへ送信した実測記事ではなく、条件と正解を自分でも確認する練習だよ。
三つの区間から、二つの合計ができる
| ID | 開始 | 終了 | 長さ |
|---|---|---|---|
| A | 09:00 | 10:00 | 60分 |
| B | 09:30 | 10:30 | 60分 |
| C | 11:00 | 11:15 | 15分 |
作業別に足せば60+60+15で135分。一方、AとBは09:30〜10:00の30分が重なっている。どれかが動いていた時間なら、09:00〜10:30の90分と、11:00〜11:15の15分を足し、105分になる。
どちらが正しいかは、知りたいもの次第。人や機械ごとの投入時間なら単純合計が必要な場合もある。今回の105分は「同じ時間軸で、少なくとも一つが動いていた長さ」という定義だよ。
AIへの依頼は、対象の単位を先に書く
各行は同じ日の日本時間の稼働区間です。
求めたいのは、どれか一つ以上が稼働していた時間の長さです。
重複する時間帯は二重に数えず、結合した区間も表示してください。
区間は開始を含み終了を含めません。
作業別の単純合計も別の列に出し、両者を混ぜないでください。
終了が開始より前の行は、勝手に翌日と解釈せず確認対象にしてください。
これは編集部が作った依頼文。合計だけでなく結合後の区間が出ると、どの重なりを処理したかを照合できる。ただし、出力された内訳も元データで確認する必要があるよ。
Pythonで区間をまとめる
以下はPython 3.12で確認した例。日付と+09:00を付け、時刻だけから翌日への繰り越しを推測しない。
from datetime import datetime
rows = [
("09:00", "10:00"),
("09:30", "10:30"),
("11:00", "11:15"),
]
intervals = []
for start, end in rows:
a = datetime.fromisoformat(f"2026-10-27T{start}:00+09:00")
b = datetime.fromisoformat(f"2026-10-27T{end}:00+09:00")
if b < a:
raise ValueError("日付と時刻の確認が必要")
intervals.append((a, b))
merged = []
for a, b in sorted(intervals):
if merged and a <= merged[-1][1]:
merged[-1] = (merged[-1][0], max(merged[-1][1], b))
else:
merged.append((a, b))
plain = sum((b-a).total_seconds() for a, b in intervals) / 60
covered = sum((b-a).total_seconds() for a, b in merged) / 60
print(plain, covered)
期待する表示は135.0と105.0。開始の早い順に並べ、重なる区間を結合してから長さを足す。ちょうど接する区間もまとめているが、接している部分に追加の長さは発生しないよ。
この例は同じタイムゾーンのデータに限定している。実際には、日付、タイムゾーン、欠損、同じ記録の重複なども先に確認しよう。
合計と区間を両方照合する
編集部ではコードの135分・105分と、結合後の二区間を確認した。AIがこの依頼に必ず同じ正解を返すと検証したものではないよ。
日付ごとへ分ける場合はタイムゾーンと日付境界、予定の時間の積み上げは作業時間とスケジュールも合わせて整理しよう。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。