0

を使用してCで現在の時刻を取得しようとしていtime_t current_time = time(NULL)ます。私が理解しているように、それは私にシステムの現在の時刻を返すでしょう。後でstructを使用してGMT時間に変換しようとしていtm* gmt = gmtime(&current_time)ます。

ctime()と関数を使用して両方の時間を印刷しasctime()ます。

私のシステムの現在の時刻はGMT+1gmtime()ですが、同じ時刻が返されますcurrent_time。なぜgmtime()同じ時間に戻ってくるのか理解できませんでした。どんな助けでもありがたいです。

コードと出力は次のとおりです。ウィンドウが表示されている現在の時刻は17:54(Stockholmゾーン; GMT + 1)です。15:54に何か返して欲しい。または、おそらく私の理解は間違っています...

time_t current_time = time(NULL);

struct tm* gmt = gmtime(&current_time);
struct tm* loc = localtime(&current_time);

printf("current time: %s\n", ctime(&current_time));
printf("gmt time %s\n", asctime(gmt));
printf("local time %s\n", asctime(loc));

出力:

current time: Mon Oct  8 17:54:06 2012

gmt time Mon Oct  8 17:54:06 2012

local time Mon Oct  8 17:54:06 2012

受け入れられた解決策: Simesから

それはおそらくあなたの問題です。TZ環境変数の値を確認してください。存在しない場合、デフォルトでGMTになります。Cygwinは、Windowsからタイムゾーン設定を自動的に取得しません。cygwinシェルで実行されているWindowsプログラムのlocaltimereturnsGMTも参照してください。

4

3 に答える 3

1

time()エポックからの秒数を返します。UTC(別名GMT)に等しい

エポックは 1970 年 1 月 1 日、英国グリニッジの 00:00:00 でした。

したがって、実際にtime()は時間を返すのではなく、時差を返します

于 2012-10-08T15:49:11.803 に答える
1

time_t 型は、UNIX エポックからの秒数を表す値を保持します。tm 型はカレンダー値を保持します。

gmtime() は、システム時刻 (常に UTC) を time_t から tm に変換するだけです。そのため、値は同じです。現地時間 (GMT+1) の表現が必要な場合は、それが localtime() の目的です。

于 2012-10-08T15:49:36.723 に答える