システム時計が夏時間であることを認識しているという奇妙な問題が発生していますが、glibcはそうではないようです。これは最新のUbuntuインストールであり、/ etc / localtimeを確認しましたが、先週のDSTへの切り替えの正しい切り替え時刻があります。
私にとって現在の正しいタイムゾーンは太平洋夏時間(UTC-7)です。システムに現在のタイムゾーンを尋ねると、正しく通知されます。
$ date +%z
-0700
しかし、私が次のプログラムを実行すると:
#include <time.h>
#include <stdio.h>
int main() {
tzset();
printf("%lu\n", timezone);
return 0;
}
誤って、出力は次のようになります。
28800
これはUTC-8、つまり太平洋標準時に対応します。(いいえ、TZは私の環境に設定されていません)
glibcと日付プログラムは同じソースからタイムゾーン情報を取得すると思いましたが、そうでないか、glibcタイムゾーングローバルがどのように機能するかを誤解しているようです。
基本的な質問は次のとおりです。
- これら2つの出力が異なるのはなぜですか
- CプログラムからシステムUTCオフセットを確実に検出するにはどうすればよいですか?