我正在编写C代码,并且在比较包含时间的2变量时遇到问题。第一次从字符串格式的数据库中获取。第二个日期是获取当前的当地时间。由于第一个日期是字符串。我决定第二次也在字符串中。问题是如何比较2变量以查看哪个更大或更早?起初我尝试过strncmp。但是,那个函数检查字符串的大小。我试图将字符串更改为数字格式但仍然失败。我的想法是使用difftime,但是再一次,我的时间是字符串而不是time_t格式。是否可以从字符串更改为time_t?任何人都可以建议一个可以帮助我进行手术的功能吗?
我正在关注此主题作为指导。 comparing two dates with different format in C
int seq_day(char *date) {
int y = strtol(date, &date, 10);
int m = strtol(++date, &date, 10);
int d = strtol(++date, &date, 10);
return (y*12+m)*31+d;
}
int expired_demotion_time()
{
char current_datetime[50] = {0};
int result1,result2;
get_today_str(current_datetime, sizeof(current_datetime), "%Y-%m-%dT%H:%M:%S");
printf("%s \n",current_datetime);
printf("%s \n",selected_g->database_time);
result1 = seq_day(current_datetime);
result2 = seq_day(selected_g->database_time);
printf("%d \n",result1);
printf("%d \n",result2);
if((result1==result2)||(result1>result2))
{
return 1;
}
return 0;
}
这是我代码的输出。
2013-11-25T13:11:17 \\current date. I'm making this string to follow the exact way as the first string.
2013-11-25T13:17:43 \\demotion time. Please take note that I cannot change this since this is taken from database.
749202 \\somehow both of them produce the same number
749202
答案 0 :(得分:0)
这是因为您的代码忽略了时间值:
int seq_day(char *date) {
int y = strtol(date, &date, 10);
int m = strtol(++date, &date, 10);
int d = strtol(++date, &date, 10);
return (y*12+m)*31+d;
}
对于纯C我认为你需要使用sscanf函数来解析字符串到整数集,如下所示:
long seq_day(char *date) {
int y,m,d,hh,mm,ss;
sscanf("%d-%d-%dT%d:%d:%d",&y,&m,&d,&hh,&mm,&ss);
return ((((y*12L+m)*31L+d)*24L+hh)*60L+mm)*60L+ss;
}