I am new to C. When I practice C, to hide the time before building tm back and forth. I noticed some difference. Please advise what I did wrong.
#include <string.h> #include <stdio.h> #include <time.h> /* test different format string to strptime " %A, %b %d, %X %z %Y " " %A, %b %d, %X %Z %Y " */ int main(int argc,char *argv[]) { char date[] = "6 Mar 2001 12:33:45"; char fmt[80]; struct tm tm; if (argc==1) return 0; strcpy(fmt,argv[1]); memset(&tm, 0, sizeof(struct tm)); if (strptime(date,"%d %b %Y %H:%M:%S",&tm)==NULL) printf("error\n"); char buf[128]; strftime(buf, sizeof(buf), fmt, &tm); printf("%s\n", buf); printf("%d\n", tm.tm_isdst); if (strptime(buf,fmt,&tm)==NULL) printf("error\n"); else { printf("year: %d; month: %d; day: %d;\n", tm.tm_year, tm.tm_mon, tm.tm_mday); printf("hour: %d; minute: %d; second: %d\n", tm.tm_hour, tm.tm_min, tm.tm_sec); printf("week day: %d; year day: %d\n", tm.tm_wday, tm.tm_yday); } return 0; }
When I use "% A,% b% d,% X% z% Y" as an argument to the conversion format, the code gives the following result:
~/user$ ./test_time " %A, %b %d, %X %z %Y " Tuesday, Mar 06, 12:33:45 +0000 2001 0 year: 101; month: 2; day: 6; hour: 12; minute: 33; second: 45 week day: 2; year day: 64
When I change the argument to "% A,% b% d,% X% Z% Y", the code cannot parse the time string generated by strftime with exactly the same format.
~/user$ ./test_time " %A, %b %d, %X %Z %Y " Tuesday, Mar 06, 12:33:45 EET 2001 0 error
Have I really missed something to let strptime correctly divulge timezone names?
Thanks in advance,
Albert