システムクロックが夏時間だとわかっている奇妙な問題が発生していますが、glibcはそうではないようです。これは最新のUbuntuインストールであり、私は/ etc/localtimeをチェックしており、先週のDSTへの切り替えには正しい切り替え時間があります。glibc "timezone"グローバルが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を検出することができます異なる
- ですか?
tzsetのマンページを読むと、dayllight変数はローカルゾーンがある時点で夏時間を使用している場合にのみ表示され、現在有効かどうかを必ずしも示すものではありません。 –
私はあなたに同意すると思います。私は{time_t t = time(NULL); printf( "%d \ n"、(int)difftime(mktime(gmtime(&t))、t)); }それは私に "タイムゾーン"と同じ結果を与えます。 –