某哥让我看看如下代码输出什么结果:
#include <iostream>
#include <string>
#include <ctime>
using namespace std;
int getTime(int& iBegin, int& iEnd, int days)
{
time_t tNow;
time(&tNow);
struct tm tmp_time = *(struct tm*)localtime(&tNow);
char szTmp[32]={0};
snprintf(szTmp, sizeof(szTmp), "%d%02d%02d", tmp_time.tm_year + 1900,tmp_time.tm_mon + 1, tmp_time.tm_mday);
iBegin = atoi(szTmp);
tNow = tNow + days*86400;
tmp_time = *(struct tm*)localtime(&tNow);
memset(szTmp,sizeof(szTmp), 0);
snprintf(szTmp, sizeof(szTmp), "%d%02d%02d", tmp_time.tm_year + 1900,tmp_time.tm_mon + 1, tmp_time.tm_mday);
iEnd = atoi(szTmp);
return 0;
}
int main()
{
int iBegin;
int iEnd;
getTime(iBegin, iEnd, 366);
cout << iBegin << endl;
cout << iEnd << endl;
return 0;
}
今天本来是2017年3月25日, 而程序的结果是:
20170326
20180327
于是乎, 我就得出这样一个结论: 这个时间是从明天开始, 1年的时间跨度。 于是根据这个逻辑, 进行判断, 发了个版本, 马上就看到了异常。 原来, 虽然今天是2017年3月25日, 但在这台linux机器上, date命令显示的却是2017年3月26日。 所以, 这段代码的真实含义是:从今天开始, 1年的时间跨度。
坑填平了, 就这样。 以后涉及到linux的时间问题, 千万别忘了看机器本身的时间, date命令搞起。