2 つtime_t
の値があり、どちらが大きいかを調べたいと考えています。
time_t
__int64
私のプラットフォーム上に内部的にあります。<
、>
および演算子を使用==
して値を比較できますか? 2 つの時間値の違いを知りたくありません。
コードは Windows 上で実行されるだけなので、移植性は気にしません。
このように値を比較することは正しいですか?
C 標準 (C++ が の定義を継承している) では、が時間を表すことができる算術型であるtime_t
とだけ述べられています。それがどのようtime_t
にそうするかについては何も言いません。原則として、実装は値を将来の日付までの秒数として定義するか、月、日、年、時、分、秒をこの順序でエンコードできます。値の比較は一貫して動作することが保証されています (たとえば、 を意味します) が、比較の結果は、表現される時間の順序について必ずしも何も言いません。time_t
time_t
t0 < t1 && t1 < t2
t0 < t2
100% 移植可能にするために、 の結果を確認できますdifftime()
。
しかし、約 99% の移植性に満足している場合は、比較が期待どおりに機能すると想定しても問題ありません (これは、リアルタイムで先行することをt0 < t1
意味します)。それが機能しない実装については聞いたことがありません。落ちたら、実装者に文句を言うことはできますが、標準に準拠していないとは言えません。t0
t1
C 標準のセクション7.27.1(3)によると (この場合 C++ 標準が参照する) time_t
は実数型であり、 6.2.5(17)で整数型または浮動小数点型として定義されています。
精度を失う可能性のある整数を明示的に想定しない限り (つまり、 を実行することによってtime_t t; int x = t;
)、安全です。
編集:私は実際にそれを取り戻します。このリンク、投稿 #6にアクセスすると、次の内容を読むことができます。
time_t が算術演算であるからといって、時間を進めるための単調増加値として時間を格納するわけではありません。実際、標準 C ライブラリは、t1 より後の t2 に対して t1 < t2 を保証しません。表現可能な値の限られた範囲を、システムごとに異なる方法で折り畳みます。
PJ Plauger
Dinkumware, Ltd.
http://www.dinkumware.com
Dinkumware は Windows システムで広く使用されているため (ただし、これが C++ 標準ライブラリにも当てはまるかどうかはわかりません)、これは関連性があると考えています。
tl;dr:std::difftime
他の回答で提案されているように使用してください。
はい、指定した限られたケースでは通常の比較演算子を使用できます。これが機能しないシステムが他にもあるかもしれませんが、最新の Linux および Windows OS は time_t 値を比較するために正常に機能します。