手机
当前位置:查字典教程网 >编程开发 >C语言 >C/C++判断传入的UTC时间是否当天的实现方法
C/C++判断传入的UTC时间是否当天的实现方法
摘要:这里先给出一个正确的版本:复制代码代码如下:#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++判断传入的UTC时间是否当天的实现方法】相关文章:

C++中获取UTC时间精确到微秒的实现代码

C++中简单读写文本文件的实现方法

C++可变参数的实现方法

Microsoft Visual C++ 程序的部署方法

深入全排列算法及其实现方法

冒泡排序的三种实现方法

C++实现正态随机分布的方法

C++读写Excel的实现方法详解

C++输出斐波那契数列的两种实现方法

全排列算法的非递归实现与递归实现的方法(C++)

精品推荐
分类导航