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

本文通过一个具体的C++代码示例介绍了如何计算当前日期到一年后的日期,并揭示了一个与系统时间设置相关的潜在问题。

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

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







         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值