複数の相互通信システムで実行されるコードを書いています。time() を使用して time_t を取得していましたが、これがシステム間のタイム ゾーンの違いに問題を引き起こしていたため、GMT で time_t を取得したいと考えています。私は time.h 関数を調べてきましたが、時間を正しく取得できることをどのように確認できるかは不明です。これは私がこれまでに思いついたものです:
time_t t = time();
struct tm *gtm = gmtime(&t);
time_t gt = mktime(gtm);
今、これは私のマシンで正しい答えを得ているようですが、他のマシンの時計が現地時間またはGMTに設定されているか、別のタイムゾーンなどに設定されている場合でも、プッシュする前にそれが普遍的に機能するかどうかを知りたいです. . 私が心配している理由は、mktime のためです。説明では、tm 構造体を「現地時間で表された暦時間」として解釈すると述べています。私のマシンにはあるようですが、GMT時間を返さないように思えます。また、gt を印刷すると、t より 4 時間進んでいるように見えます。しかし、次を実行すると:
time_t t = time();
struct tm *gtm = gmtime(&t);
struct tm *ltm = localtime(&t);
printf("%d, %d\n", gtm->tm_hour, ltm->tm_hour);
時間は同じで現地時間ですが、これは私が期待したものではありません。
記録として、別の回答で timegm() への参照を見ました。これは完璧に聞こえますが、私のシステムには存在しません。
要するに、C の Windows マシンで GMT の time_t を取得するにはどうすればよいですか?
編集:msvcrtを使用していないため、追加されたmsvcrtタグを削除しました。