C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で2つの時刻(時間・分・秒)の差を計算するプログラムの書き方

時間・分・秒の形式で与えられた2つの時刻(期間)があり、その差を求めたいという場面はよくあります。本記事では、C++を使って2つの時刻の差を正しく計算する方法を、サンプルコードとともにわかりやすく解説します。

例えば、次のような計算を行います。

時刻1 = 8:6:2
時刻2 = 3:9:3
時刻の差 = 4:56:59

一見単純な引き算に見えますが、秒や分がマイナスにならないよう「桁借り」の処理が必要になる点がポイントです。

C++プログラムの全体コード

2つの時刻の差を計算するプログラムは以下の通りです。

サンプルコード

#include <iostream>
using namespace std;
int main() {
    int hour1, minute1, second1;
    int hour2, minute2, second2;
    int diff_hour, diff_minute, diff_second;

    cout << "Enter time period 1" << endl;
    cout << "Enter hours, minutes and seconds respectively: "<< endl;
    cin >> hour1 >> minute1 >> second1;

    cout << "Enter time period 2" << endl;
    cout << "Enter hours, minutes and seconds respectively: "<< endl;
    cin >> hour2 >> minute2 >> second2;

    if(second2 > second1) {
        minute1--;
        second1 += 60;
    }

    diff_second = second1 - second2;

    if(minute2 > minute1) {
        hour1--;
        minute1 += 60;
    }
    diff_minute = minute1 - minute2;
    diff_hour = hour1 - hour2;

    cout <<"Time Difference is "<< diff_hour <<":"<< diff_minute <<":"<<diff_second;

    return 0;
}

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

Enter time period 1
Enter hours, minutes and seconds respectively: 7 6 2

Enter time period 2
Enter hours, minutes and seconds respectively: 5 4 3

Time Difference is 2:1:59

この例では、7時間6分2秒から5時間4分3秒を引いた結果として、「2時間1分59秒」が表示されています。

プログラムの解説

1. 時刻の入力を受け付ける

まず、ユーザーから2つの時刻をそれぞれ「時間・分・秒」の形式で入力してもらいます。該当するコードは以下の部分です。

cout << "Enter time period 1" << endl;
cout << "Enter hours, minutes and seconds respectively: "<< endl;
cin >> hour1 >> minute1 >> second1;

cout << "Enter time period 2" << endl;
cout << "Enter hours, minutes and seconds respectively: "<< endl;
cin >> hour2 >> minute2 >> second2;

cinを使うことで、スペース区切りで入力された3つの値をそれぞれhourminutesecondの変数に格納できます。

2. 差を計算する(桁借りの処理)

次に、2つの時刻の差を計算します。ここがこのプログラムの核心部分です。引く側の秒や分の方が大きい場合、そのまま引き算すると負の値になってしまうため、上位の単位から1つ借りて60を加える処理を行います。

if(second2 > second1) {
    minute1--;
    second1 += 60;
}
diff_second = second1 - second2;
if(minute2 > minute1) {
    hour1--;
    minute1 += 60;
}
diff_minute = minute1 - minute2;
diff_hour = hour1 - hour2;

処理の流れは以下の通りです。

  • 秒の計算: 引く側の秒(second2)が大きい場合は、分から1借りて秒に60を加えてから差を求めます。
  • 分の計算: 同様に、引く側の分(minute2)が大きい場合は、時間から1借りて分に60を加えてから差を求めます。
  • 時間の計算: 最後に時間同士の差をそのまま計算します。

これは、私たちが筆算で時刻の引き算を行う際の「繰り下がり」と同じ考え方です。

3. 結果を出力する

最後に、計算した差を「時間:分:秒」の形式で画面に表示します。

cout <<"Time Difference is "<< diff_hour <<":"<< diff_minute <<":"<<diff_second;

まとめ

このように、時刻の差を計算する際は、秒→分→時間の順に桁借りを考慮しながら引き算を行うのがポイントです。今回紹介した手法は、タイマーやストップウォッチ、勤怠管理など、時間を扱うさまざまなプログラムの基礎となる考え方なので、ぜひ理解しておきましょう。

  1. C++で2つの同心円の間の面積を計算する方法を解説

    同心円とは?同心円とは、2つの円が共通の中心を共有しながら、半径の長さが異なる(r1 と r2、ただし r2 > r1)形状のことです。円の中に別の円が含まれているイメージで、2つの同心円の間の領域は「環(アニュラス)」と呼ばれます。以下は同心円の図です。問題半径の長さが異なる2つの同心円(r1 と r2、ただし r2 > r1)が与えられたとします。課題は、青色で強調表示された2つの円の間の面積を求めることです。2つの円の間の面積を計算するには、大きい円の面積から小さい円の面積を差し引きます。大きい円の半径を r2、小さい円の半径を r1 とすると、求める面積は次のようになります。入出力例入

  2. 【初心者向け】Pythonで2つのリストの差分(違い)を抽出する方法を解説

    この記事では、2つのリストが与えられたときに、その差分(違い)を表示するPythonプログラムを紹介します。Pythonにはset()メソッドが用意されており、ここではこのメソッドを活用します。 セット(集合)とは、重複する要素を持たない順序なしのコレクションです。セットオブジェクトは、和集合・積集合・差集合・対称差といった数学的な操作もサポートしているため、リスト同士の比較に非常に便利です。 実行例 入力: A = [10, 15, 20, 25, 30, 35, 40] B = [25, 40, 35] 出力: [10, 20, 30, 15] 考え方 求めたい差分リストは、次のよう