65,186
社区成员




// 获取已过去的时间日期
void Date_GetElapsedDate(tm oldDate, tm* pOutDate) // 注意:oldDate为真实日期
{
memset(pOutDate, 0, sizeof(tm));
oldDate.tm_year -= 1900;
oldDate.tm_mon -= 1;
tm curDate;
time_t curTime = time(NULL);
localtime_s(&curDate, &curTime);
UINT time_diff = UINT(difftime(mktime(&curDate), mktime(&oldDate)));
pOutDate->tm_sec = time_diff % 60; time_diff /= 60;
pOutDate->tm_min = time_diff % 60; time_diff /= 60;
pOutDate->tm_hour = time_diff % 24; time_diff /= 24;
int month_days[13] = { 0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 从当前日期往前减天数,直到天数减完
for (int y = curDate.tm_year + 1900, m = curDate.tm_mon + 1, d = time_diff; ; y--, pOutDate->tm_year++)
{
month_days[2] = ((y%4 == 0 && y%100 != 0) || y%400 == 0)? 29 : 28;
for ( ; m>0; m--, pOutDate->tm_mon++)
{
d -= month_days[m];
if (d < 0)
break;
pOutDate->tm_mday = d;
}
m = 12;
if (d < 0)
break;
}
}
自己写的代码,
看看,谁还能更精简的代码实现出来?