1

私は2つの軍事時間の差を取り、その時差を取得するプログラムを作成しようとしています。

Example:

**AM to PM**

Time 1: 0900

Time 2: 1730

Time Difference: 8 hours 30 minutes

**PM to AM**

Time 1: 1200

Time 2: 1100

Time Difference: 23 hours 0 minutes

いくつかのifthanelseステートメントを使用して、軍事時間から標準時間に変換する方法を理解することができましたが、時間を差し引く方法に固執しています。足し算と引き算だけで紙の上でやる方法を考えようとしていましたが、すべての場合に機能する方法を開発していません。何か助けはありますか?

4

2 に答える 2

2

1つのオプションは、時間を時間と分という2つの要素に分割することです。

まず、時間をかけてください。1730で100で割ります。整数などの場合、17時間になります(自動的に切り捨てられます)。

次に、1730を取り、100で変更して30分にします。

int time1 = 900;
int time2 = 1730;
int diffHours = time2 / 100 - time1 / 100;
int diffMinutes = time2 % 100 - time1 % 100;

モジュラス(%)に慣れていない場合は、2つの数値を除算した後の余りが返されるだけなので、7%3は1になります。

于 2013-02-02T22:27:14.073 に答える
1

軍事時間がint0000..2400の範囲の値として格納されているとすると、次の関数はそのような2つの値の差を返します。

#include <cassert>

extern int timediff_minutes(int t1, int t2);

int timediff_minutes(int t1, int t2)
{
    assert(t1 >= 0 && t1 <= 2400);
    assert(t2 >= 0 && t2 <= 2400);
    assert(t1 % 100 < 60 && t2 % 100 < 60);
    int t1_mins = (t1 / 100) * 60 + (t1 % 100);
    int t2_mins = (t2 / 100) * 60 + (t2 % 100);
    return(t2_mins - t1_mins);
}

2400は、1日の終わりを表すのに役立ちます。また、2400の使用は、ISO 8601:2004によって認可されています。データ要素と交換形式—情報交換—日付と時刻の表現

4.2.3真夜中

4.2.2に従って、深夜の基本形式および拡張形式での完全な表現は、次の2つの方法のいずれかで表現されるものとします。

    Basic format    Extended format
 a) 000000          00:00:00       (the beginning of a calendar day)
 b) 240000          24:00:00       (the end of a calendar day)

表現は、4.2.2.3に従って精度が低下する場合があり、4.2.2.5に従って時間式として指定される場合があります。真夜中を表すために、4.2.2.4に従って、ゼロのみを含む小数で表現を拡張できます。

注1真夜中は通常、[00:00]または[24:00]として表されます。
注21つの暦日の終わり[24:00]は、次の暦日の開始時の[00:00]と一致します。たとえば、1985年4月12日の[24:00]は、13の[00:00]と同じです。 1985年4月。日付または時間間隔に関連付けがない場合、a)とb)の両方が24時間の計時システムで同じ現地時間を表します。
注3表現a)またはb)の選択は、日付または時間間隔との関連付けによって異なります。[hh]の値が[24]である表現は、4.4に準拠した時間間隔の終了、または4.5に準拠した繰り返しの時間間隔を表す場合にのみ推奨されます。

于 2013-02-02T22:30:16.550 に答える