【发布时间】:2019-12-20 17:55:24
【问题描述】:
我正在尝试编写一个函数来查找当前日期与格式化字符串(如dd.mm.yy H:M:S)中给出的日期之间的天数差异,但 mktime 每次都返回 -1。尝试用零初始化两个时间结构,但这没有帮助。
此外,将time_t 更改为size_t 使其可以与mktime(now) 一起使用,但不能与mktime(parsedDate) 一起使用
我真的很困惑,我做错了什么?
我在 Windows 10 上使用 MSVC2019 (v142)。
int findDifferenceInDays(char* dateStr)
{
// Date/time format example:
// 12.09.2018 13:44:30
char date[] = "12.09.2018 13:44:30";
struct tm *now, *parsedTime;
time_t t_now = time(0);
now = localtime(&t_now);
time_t temp_time = time(&temp_time);
parsedTime = localtime(&temp_time);
int day, month, year, hour, minutes, seconds;
sscanf(dateStr, "%d.%d.%d %d:%d:%d",
&day, &month, &year, &hour, &minutes, &seconds);
parsedTime->tm_year = year - 1990;
parsedTime->tm_mon = month - 1;
parsedTime->tm_mday = day;
parsedTime->tm_hour = hour;
parsedTime->tm_min = minutes;
parsedTime->tm_sec = seconds;
time_t endTime, begTime;
endTime = mktime(now);
begTime = mktime(parsedTime);
double diffInSeconds = difftime(endTime, begTime);
int daysDifference = difftime(endTime, begTime) / (60*60*24);
printf("Days between %s and now: %lf\n", dateStr, daysDifference / (60 * 60 * 24));
return daysDifference;
}
【问题讨论】:
-
now和parsedTime都指向同一个结构。 -
但是,我不确定为什么这会导致
mktime()返回-1。它应该只会让您计算出0的差异。 -
daysDifference / (60 * 60 * 24)是一个int,但您使用%lf格式打印它,即long double。 -
date变量有什么用?你永远不会使用它。您传递给函数的dateStr的值是多少? -
可能不是你的直接错误,而是
parsedTime->tm_year = year - 1900; /* not 1990 */