私はこのテストコードを持っています:
1 #include <stdio.h>
2 #include <time.h>
3
4 int main() {
5 struct tm *info1;
6 struct tm *info2;
7 unsigned long i = 100000000;
8 unsigned long j = 200000000;
9
10 info1 = localtime((time_t *) &i);
11 info2 = localtime((time_t *) &j);
12
13 printf("%s(): info1->tm_sec = %d\n", __func__, info1->tm_sec);
14 printf("%s(): info1->tm_min = %d\n", __func__, info1->tm_min);
15 printf("%s(): info1->tm_hour = %d\n", __func__, info1->tm_hour);
16 printf("%s(): info1->tm_mday = %d\n", __func__, info1->tm_mday);
17 printf("%s(): info1->tm_mon = %d\n", __func__, info1->tm_mon);
18 printf("%s(): info1->tm_year = %d\n", __func__, info1->tm_year);
19
20 printf("%s(): info2->tm_sec = %d\n", __func__, info2->tm_sec);
21 printf("%s(): info2->tm_min = %d\n", __func__, info2->tm_min);
22 printf("%s(): info2->tm_hour = %d\n", __func__, info2->tm_hour);
23 printf("%s(): info2->tm_mday = %d\n", __func__, info2->tm_mday);
24 printf("%s(): info2->tm_mon = %d\n", __func__, info2->tm_mon);
25 printf("%s(): info2->tm_year = %d\n", __func__, info2->tm_year);
26
27
28
29 return 0;
30 }
出力は次のとおりです。
main(): info1->tm_sec = 20
main(): info1->tm_min = 33
main(): info1->tm_hour = 3
main(): info1->tm_mday = 4
main(): info1->tm_mon = 4
main(): info1->tm_year = 76
main(): info2->tm_sec = 20
main(): info2->tm_min = 33
main(): info2->tm_hour = 3
main(): info2->tm_mday = 4
main(): info2->tm_mon = 4
main(): info2->tm_year = 76
7 行目と 8 行目は、呼び出し元の関数から渡された unsigned long としての実際のタイムスタンプ (エポックからの秒数) です (ここではハードコーディングしました)。
10 行目と 11 行目が気になります。struct tm
2 つのタイムスタンプi
との情報を取得する必要がありj
ます。基本的に、 の月を取得して の月info1
と比較する必要がありますinfo2
。
13 行目から 25 行目までの出力を実行するinfo1
とinfo2
、同じ値 (つまり、同じ秒、同じ分、同じ時間など) が返されます。
2 つの質問:
- なぜそれらは同じ値を持っているのですか?
info1
との異なる値を取得するにはどうすればよいinfo2
ですか?