#include #include #include /** * @brief 比较两个时间字符串的大小 * * @param time1 时间字符串1,格式为 "HH:MM" * @param time2 时间字符串2,格式为 "HH:MM" * * @return 返回值为整数: * -1 表示 time1 小于 time2 * 0 表示 time1 等于 time2 * 1 表示 time1 大于 time2 * 0 也可能表示解析失败或转换失败 * * @details 该函数将两个时间字符串解析为 struct tm 结构,并使用 mktime 函数将其转换为 time_t 类型, * 然后比较这两个时间,返回相应的比较结果。如果解析或转换失败,函数返回 0。 */ int compareTimes(const char *time1, const char *time2) { struct tm tm_base, tm_time1, tm_time2; // 设置基准日期为当前日期 time_t current_time = time(NULL); localtime_r(¤t_time, &tm_base); // 解析时间字符串1 if (strptime(time1, "%H:%M", &tm_time1) == NULL) { fprintf(stderr, "Failed to parse time1\n"); return 0; // or handle the error in an appropriate way } // 解析时间字符串2 if (strptime(time2, "%H:%M", &tm_time2) == NULL) { fprintf(stderr, "Failed to parse time2\n"); return 0; // or handle the error in an appropriate way } // 设置日期部分为基准日期的日期部分 tm_time1.tm_year = tm_base.tm_year; tm_time1.tm_mon = tm_base.tm_mon; tm_time1.tm_mday = tm_base.tm_mday; tm_time2.tm_year = tm_base.tm_year; tm_time2.tm_mon = tm_base.tm_mon; tm_time2.tm_mday = tm_base.tm_mday; // 将 struct tm 结构转换为 time_t 类型 time_t t1 = mktime(&tm_time1); time_t t2 = mktime(&tm_time2); // 检查转换是否成功 if (t1 == -1 || t2 == -1) { fprintf(stderr, "Failed to convert time to time_t\n"); return 0; // or handle the error in an appropriate way } // 比较时间并返回相应的结果 if (t1 < t2) { return -1; } else if (t1 > t2) { return 1; } else { return 0; } } int main() { const char *time1 = "12:11"; const char *time2 = "15:45"; int result = compareTimes(time1, time2); if (result < 0) { printf("%s is earlier than %s\n", time1, time2); } else if (result > 0) { printf("%s is later than %s\n", time1, time2); } else { printf("%s is equal to %s\n", time1, time2); } return 0; }