C/C++判断传入的UTC时间是否当天的实现方法
C/C++判断传入的UTC时间是否当天的实现方法
发布时间:2016-12-28 来源:查字典编辑
摘要:这里先给出一个正确的版本:复制代码代码如下:#include#includeusingnamespacestd;boolIsInToday(...

这里先给出一个正确的版本:

复制代码 代码如下:

#include <iostream>

#include <time.h>

using namespace std;

bool IsInToday(long utc_time){

time_t timeCur = time(NULL);

struct tm curDate = *localtime(&timeCur);

struct tm argsDate = *localtime(&utc_time);

if (argsDate.tm_year == curDate.tm_year &&

argsDate.tm_mon == curDate.tm_mon &&

argsDate.tm_mday == curDate.tm_mday){

return true;

}

return false;

}

std::string GetStringDate(long utc_time){

struct tm *local = localtime(&utc_time);

char strTime[50];

sprintf(strTime,"%*.*d年%*.*d月%*.*d日",

4,4,local->tm_year+1900,

2,2,local->tm_mon+1,

2,2,local->tm_mday);

return strTime;

}

std::string GetStringTime(long utc_time){

struct tm local = *localtime(&utc_time);

char strTime[50];

sprintf(strTime,"%*.*d:%*.*d:%*.*d",

2,2,local.tm_hour,

2,2,local.tm_min,

2,2,local.tm_sec);

return strTime;

}

void ShowTime(long utc_time){

if (IsInToday(utc_time)){

printf("%sn",GetStringTime(utc_time).c_str());

}else{

printf("%sn",GetStringDate(utc_time).c_str());

}

}

int main(){

ShowTime(1389998142);

ShowTime(time(NULL));

return 0;

}

在函数中struct tm *localtime(const time_t *);中返回的指针指向的是一个全局变量,如果把函数bool IsInToday(long utc_time);写成样,会有什么问题呢?

复制代码 代码如下:

bool IsInToday(long utc_time){

time_t timeCur = time(NULL);

struct tm* curDate = localtime(&timeCur);

struct tm* argsDate = localtime(&utc_time);

if (argsDate->tm_year == curDate->tm_year &&

argsDate->tm_mon == curDate->tm_mon &&

argsDate->tm_mday == curDate->tm_mday){

return true;

}

return false;

}

这里把curDate和argsDate声明成了指针。运行程序就会发现,这个函数返回的总是ture,为什么呢?

因为在struct tm* curDate = localtime(&timeCur);中返回的指针指向的是一个全局变量,即curDate也指向这个全局变量。

在struct tm* argsDate = localtime(&utc_time);中返回额指针也指向的这个全局变量,所以argsDate和cur指向的是同一个全局变量,他们的内存区域是同一块。

在第二次调用localtime()时,修改了全局变量的值,curDate也随之改变,因此curDate == argsDate;所以返回的结果衡等于true。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C语言学习
热门C语言学习
编程开发子分类