与本地程序相关的一个bug------要配合利用date命令观察才好!

来源:互联网 发布:松下fpxh编程样列 编辑:程序博客网 时间:2024/05/29 07:29

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

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







         

1 0