1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #include <stdio.h>
- #include <string.h>
- #include <time.h>
- /**
- * @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;
- }
|