#include <limits.h> #include <stdio.h> #include <time.h> static const struct { const char *fmt; long int gmtoff; } tests[] = { { "1113472456 +1000", 36000 }, { "1113472456 -1000", -36000 }, { "1113472456 +10", 36000 }, { "1113472456 -10", -36000 }, { "1113472456 +1030", 37800 }, { "1113472456 -1030", -37800 }, { "1113472456 +0030", 1800 }, { "1113472456 -0030", -1800 }, { "1113472456 -1330", LONG_MAX }, { "1113472456 +1330", LONG_MAX }, { "1113472456 -1060", LONG_MAX }, { "1113472456 +1060", LONG_MAX }, { "1113472456 1030", LONG_MAX }, }; #define ntests (sizeof (tests) / sizeof (tests[0])) int main (void) { int result = 0; for (int i = 0; i < ntests; ++i) { struct tm tm; if (strptime (tests[i].fmt, "%s %z", &tm) == NULL) { if (tests[i].gmtoff != LONG_MAX) { printf ("round %d: strptime unexpectedly failed\n", i); result = 1; } continue; } if (tm.tm_gmtoff != tests[i].gmtoff) { printf ("round %d: tm_gmtoff is %ld\n", i, (long int) tm.tm_gmtoff); result = 1; } } if (result == 0) puts ("all OK"); return 0; }