某哥让我看看如下代码输出什么结果:

#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命令搞起。







         


本文转载:CSDN博客