源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C/C++判断传入的UTC时间是否当天的实现方法

  • 时间:2022-03-16 10:19 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C/C++判断传入的UTC时间是否当天的实现方法
这里先给出一个正确的版本:
[u]复制代码[/u] 代码如下:
#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("%s\n",GetStringTime(utc_time).c_str());     }else{         printf("%s\n",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);写成样,会有什么问题呢?
[u]复制代码[/u] 代码如下:
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。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部