c - Two struct tm info called by separate localtime returns the same value -
i have test code:
1 #include <stdio.h> 2 #include <time.h> 3 4 int main() { 5 struct tm *info1; 6 struct tm *info2; 7 unsigned long = 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 }
the output is:
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
lines 7 , 8 timestamps (seconds since epoch) unsigned long passed calling function (i hardcoded here).
lines 10 , 11 concern. need obtain struct tm
info of 2 timestamps i
, j
. basically, need month of info1
, compare against month of info2
, etc.
doing prints on lines 13 25, info1
, info2
returns same value (i.e same seconds, same minutes, same hours, etc).
two questions:
- why have same values?
- how should obtain different values of
info1
,info2
?
localtime() -> return value points statically allocated struct might overwritten subsequent calls of date , time functions. use localtime_r() stores data in user-supplied struct.
#include <stdio.h> #include <time.h> int main() { struct tm info1; struct tm info2; unsigned long = 100000000; unsigned long j = 200000000; localtime_r((time_t *) &i,&info1); localtime_r((time_t *) &j,&info2); printf("%s(): info1->tm_sec = %d\n", __func__, info1.tm_sec); printf("%s(): info1->tm_min = %d\n", __func__, info1.tm_min); printf("%s(): info1->tm_hour = %d\n", __func__, info1.tm_hour); printf("%s(): info1->tm_mday = %d\n", __func__, info1.tm_mday); printf("%s(): info1->tm_mon = %d\n", __func__, info1.tm_mon); printf("%s(): info1->tm_year = %d\n", __func__, info1.tm_year); printf("%s(): info2->tm_sec = %d\n", __func__, info2.tm_sec); printf("%s(): info2->tm_min = %d\n", __func__, info2.tm_min); printf("%s(): info2->tm_hour = %d\n", __func__, info2.tm_hour); printf("%s(): info2->tm_mday = %d\n", __func__, info2.tm_mday); printf("%s(): info2->tm_mon = %d\n", __func__, info2.tm_mon); printf("%s(): info2->tm_year = %d\n", __func__, info2.tm_year); return 0; }
Comments
Post a Comment