お世話になっております。
またC言語で疑問がわいてきたので質問させていただきます。
以下のようなプログラム文があります。
c
1#include <stdio.h> 2#include <time.h> 3 4int main(void) 5{ 6 struct tm *systime, *systimeg; 7 time_t t; 8 9 t = time(NULL); 10 systime = localtime(&t); 11 systimeg = gmtime(&t); 12 13 printf("時刻: %.2d:%.2d:%.2d:\n", systime->tm_hour, systime->tm_min, systime->tm_sec); 14 printf("日付: %.2d/%.2d/%.2d\n", systime->tm_mon+1, systime->tm_mday, systime->tm_year +1900); 15 16 //systimeg = gmtime(&t); 17 printf("時刻: %.2d:%.2d:%.2d:\n", systimeg->tm_hour, systimeg->tm_min, systimeg->tm_sec); 18 printf("日付: %.2d/%.2d/%.2d\n", systimeg->tm_mon+1, systimeg->tm_mday, systimeg->tm_year +1900); 19 20 return 0; 21}
出力結果は
時刻: 06:07:19:
日付: 02/09/2016
時刻: 06:07:19:
日付: 02/09/2016
で、localtime()関数とgmtime()関数の取得した時間が同じになっています。
localtime()関数はシステム時刻、gmtime()関数は世界標準時刻(グリニッジ標準時)を返します。
しかし、gmtime()関数の位置を下に示す文のように移動させれば結果は
時刻: 15:13:19:
日付: 02/09/2016
時刻: 06:13:19:
日付: 02/09/2016
というふうに正しい結果が得られます。
c
1#include <stdio.h> 2#include <time.h> 3 4int main(void) 5{ 6 struct tm *systime, *systimeg; 7 time_t t; 8 9 t = time(NULL); 10 systime = localtime(&t); 11 //systimeg = gmtime(&t); 12 13 printf("時刻: %.2d:%.2d:%.2d:\n", systime->tm_hour, systime->tm_min, systime->tm_sec); 14 printf("日付: %.2d/%.2d/%.2d\n", systime->tm_mon+1, systime->tm_mday, systime->tm_year +1900); 15 16 systimeg = gmtime(&t); 17 printf("時刻: %.2d:%.2d:%.2d:\n", systimeg->tm_hour, systimeg->tm_min, systimeg->tm_sec); 18 printf("日付: %.2d/%.2d/%.2d\n", systimeg->tm_mon+1, systimeg->tm_mday, systimeg->tm_year +1900); 19 20 return 0; 21}
ここで疑問がわいてきまして、systimegには最初のプログラム文でもsystime = localtime(&t);が
実行された直後にsystimeg = gmtime(&t);が実行されて世界標準時刻が代入されていると
思ってたのですが、実際に出力してみるとシステム時刻が代入されているようです。
なぜsystimeg = gmtime(&t);を書く位置によって取得される時刻が変わるのか疑問です。
どなたかお分かりの方がいれば教えていただければと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/09 07:08