gpt4 book ai didi

c - 编写一个返回最近日期的函数

转载 作者:行者123 更新时间:2023-11-30 21:38:40 25 4
gpt4 key购买 nike

任务:假设我有一个格式为 Tue, 27 Mar 2018 04:46:22 GMT 的日期列表,并且我想找到最近的日期给定列表的日期。我创建了一个函数来比较每两个日期并输出最新的日期。

代码带有一些调试打印的函数

char *max_time(char *t1, char *t2) {
if (t1 == NULL && t2 == NULL) {
fprintf(stderr, "t1, t2 are null");
exit(1);
}

if (t1 == NULL) {
return t2;
} else if (t2 == NULL) {
return t1;
}


printf("Incoming time1: %s, size: %zu\n", t1, strlen(t1));
printf("Incoming time2: %s, size: %zu\n", t2, strlen(t2));

struct tm tm1, tm2;
time_t time1, time2;
double diff;

memset(&tm1, 0, sizeof(struct tm));
memset(&tm2, 0, sizeof(struct tm));
memset(&time1, 0, sizeof(time_t));
memset(&time2, 0, sizeof(time_t));

strptime(t1, "%a, %d %b %Y %X %Z", &tm1);
strptime(t2, "%a, %d %b %Y %X %Z", &tm2);
time1 = mktime(&tm1);
time2 = mktime(&tm2);

/* debug */
char str1[50];
char str2[50];
strftime(str1, 50, "%a, %d %b %Y %X %Z", &tm1);
strftime(str2, 50, "%a, %d %b %Y %X %Z", &tm2);
printf("Time1: %s\n", str1);
printf("Time2: %s\n", str2);
/* end debugging */


diff = difftime(time1, time2);
printf("Time diff: %f\n", diff);
if (diff > 0) {
return t1;
} else {
return t2;
}
}

使用

char *t1[] = {"Tue, 27 Mar 2018 04:46:22 GMT\r",
"Tue, 27 Mar 2018 04:47:46 GMT\r",
"Tue, 27 Mar 2018 04:57:17 GMT\r",
"Tue, 27 Mar 2018 04:49:31 GMT\r",
"Tue, 27 Mar 2018 04:48:46 GMT\r",
"Mon, 26 Mar 2018 03:44:55 GMT\r"};

int i = 0;
char *res = NULL;
for(i = 0; i < 5; i++) {
res = max_time(res, t1[i]);
printf("Res: %s\n", res);
}

它确实适用于示例案例,但在实际部署中却失败了。报告部分内容如下:

错误报告:部署输出,无法将字符转换为时间戳 enter image description here

示例部署与实际部署的区别在于数据结构,部署案例中日期数据存储在链表(列表->日期)中。根据报告,看起来我未能将 char 数组传递给 strptime,如果这是真的,很可能我在移动指针时做了一些不正确的事情。但我不确定它到底发生在哪里。如果您有其他方法可以达到相同的结果,请随时发表评论。

最佳答案

第一个问题是memset(&time1, 0, sizeof(struct tm));但最终它会覆盖 diffstr1,所以它不应该成为问题的原因。

但是:

当您使用“人类”可读的月份命名时,您应该确保生产系统和开发系统上的时间区域设置为相同。

尝试使用 setlocale() 函数检查一下:

#include <locale.h>
printf("TS_LOCALE %s", setlocale(LC_TIME, NULL));

如果不同,只需将其设置为与开发计算机上的值相同即可。

关于c - 编写一个返回最近日期的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49952825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com