#define _XOPEN_SOURCE #include #define __USE_UNIX98 #include #include int mktime_test(const char* str) { struct tm local_tm, local_tm2; time_t local_time; char buffer[128]; memset(buffer, 0, sizeof(buffer)); puts(str); if (strptime(str, "%Y-%m-%d %H:%M:%S", &local_tm) == NULL) { fprintf(stderr, "failed to convert `%s' to struct tm\n", str); return 1; } snprintf(buffer, sizeof(buffer), "%d-%02d-%02d %02d:%02d:%02d", local_tm.tm_year + 1900, local_tm.tm_mon + 1, local_tm.tm_mday, local_tm.tm_hour, local_tm.tm_min, local_tm.tm_sec); puts(buffer); if (strcmp(str, buffer) != 0) { fprintf(stderr, "strptime() failed\n"); return 1; } local_tm.tm_isdst = -1; local_time = mktime(&local_tm); localtime_r(&local_time, &local_tm2); snprintf(buffer, sizeof(buffer), "%d-%02d-%02d %02d:%02d:%02d", local_tm2.tm_year + 1900, local_tm2.tm_mon + 1, local_tm2.tm_mday, local_tm2.tm_hour, local_tm2.tm_min, local_tm2.tm_sec); puts(buffer); if (strcmp(str, buffer) != 0) { fprintf(stderr, "mktime() or localtime_r() failed\n"); return 1; } return 0; } int main() { mktime_test("1981-07-01 00:00:00"); mktime_test("1981-07-01 00:00:00"); return 0; }