私は現在のシステム時間にアクセスするためにTimeオブジェクトが必要なC++でアプリケーションを構築しています。これを行うには、time.h
を使用します。ユニットテストをするとき時間の変更に失敗したため、struct tm 'tm_isdst'フラグを使用する正しい方法ですか?
Time::Time(bool p_daylightSavingEnabled /* = true */)
{
time_t rawTime = time(nullptr);
struct tm* timeInfo = localtime(&rawTime);
timeInfo->tm_isdst = static_cast<int>(p_daylightSavingEnabled);
m_hours = timeInfo->tm_hour;
m_minutes = timeInfo->tm_min;
m_seconds = timeInfo->tm_sec;
}
すべては私が追加tm_isdst
フラグの使用を除き、かなり単純ですが、それでも私に神秘的である:私の2つのコンストラクタは次のように行きます。インターネット上でこのフラグを正しく使用する方法についての明確な文書は見つかっておらず、一部のシステムでは利用できない(つまり0に設定されている)と聞いています。
tm_isdst
を使用する正しい方法ですか、そうでない場合は(たとえばコンストラクタなどで)異なるシステム間で正しく動作させるにはどうすればよいですか?
説明:今のところ、私はtime.h
の代替案に興味はありません。
いいえ。 'localtime'が返すものを見てください。補償的な変更を加えることなく無視したり上書きしたりすることはできません。そして、はい、それは一般的にあまり定義されていません。 –
@JonathanLeffler *あなたはそれが無視され/より多くの補償的な変更なしでオーバーライドされることはできないふりをしてはいけません。私が見ることができる例がありますか? – BobMorane
'localtime'のマニュアルページは' is_dst'の意味を完全に説明しています。 'localtime'のマニュアルページにそのフィールドの記述が不明な場合は、あなたには正確に何が分からないのかを説明する必要があります。 –