在项目中经常会显示一个时间,如果这个时间在今日内就显示为时分秒,否则显示为年月日。

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

#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);写成样,会有什么问题呢?

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时间是否在今天的更多相关文章

  1. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  2. Linux与Windows中的UTC时间

    Linux与Windows中的UTC时间 先介绍几个术语 UTC 协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“Temp ...

  3. 关于UTC时间和本地时间

    收藏了个类Publics  可以实现本地时间和UTC时间的转换 UCT时间=本地时间-8    本地时间比UTC时间快8小时 element-ui的日期选择器上  选择的时间显示的是本地时间   但实 ...

  4. QDateTime 本地时间和UTC时间转换问题

    先说一下UTC,搜索360百科: 协调世界时,又称世界统一时间.世界标准时间.国际协调时间,简称UTC,是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统.1979年12月3日在内瓦举行 ...

  5. 关于时间:UTC时间、GMT时间、本地时间、Unix时间戳

    1.UTC时间 与 GMT时间我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的. 2.UTC时间 与 本地时UTC + 时区差 = 本地时间时区差东 ...

  6. Python: 处理mongodb文档,怎么让UTC时间转换为本地时间?

    存储数据到MongoDB数据库时,一般我们会加一个更新数据的时间update_time.这时在python代码中 会用到datetime模块以便获取当前系统时间,但是存入到MongoDB数据库时,存储 ...

  7. Js 日期转换函数(UTC时间转换及日期想加减)

    IOS上Js日期转换中new Date("yyyy-mm-dd")不能正常工作,必须使用new Date("yyyy/MM/dd"); 日期相加减: Date. ...

  8. JS将指定的时间戳转为UTC时间

    Js中获取时间戳可用var dayMiliseconds = parseInt(new Date().valueOf());Js的时间戳单位为毫秒(1s = 1000 ms),下面是一个将制定的格式转 ...

  9. CloudStack中云主机的UTC时间转为本地时间

    CloudStack项目中使用的时间是UTC时间,具体什么是UTC时间大家可以百度,但是我们需要的时间是正常的时间,所以在国泰君安开发测试云中,同步资源管理中虚拟机的同步管理,需要对虚拟机的时间格式化 ...

随机推荐

  1. Markdown 语法手册 - 完整版(下)

    6. 引用 语法说明: 引用需要在被引用的文本前加上>符号. 代码: > 这是一个有两段文字的引用, > 无意义的占行文字1. > 无意义的占行文字2. > > 无 ...

  2. jquery操作radio,checkbox

    1. 获取radio选中的value. $('input:radio[name=sex]:checked').val(); 2. 选择 radio 按钮 (Male). $('input:radio[ ...

  3. 转发:查看centos中的用户和用户组

    1.用户列表文件:/etc/passwd/ 2.用户组列表文件:/etc/group 3.查看系统中有哪些用户: cut -d : -f 1 /etc/passwd 4.查看可以登录系统的用户: ca ...

  4. docker部署maven私有仓库 nexus3

    docker pull sonatype/nexus3: docker run -d --name nexus3.x --network host -v /volume-data/nexus3/nex ...

  5. 基于Centos搭建Laravel 环境搭建

    系统要求:CentOS 7.2 64 位操作系统 安装 Laravel Laravel 简介 Laravel 是一套简洁.优雅的 PHP Web 开发框架.它可以让你从面条一样杂乱的代码中解脱出来:它 ...

  6. selenium是如何启动浏览器的

    前几天有同学问到selenium是怎么样启动浏览器的(selenium启动浏览器的原理),当时稍微讲解了一下,不过自我感觉不够具体,现在特地把启动原理通过代码和一系列操作给串联起来,希望可以帮助大家更 ...

  7. 空间谱专题10:MUSIC算法

    作者:桂. 时间:2017-09-19  19:41:40 链接:http://www.cnblogs.com/xingshansi/p/7553746.html 前言 MUSIC(Multiple ...

  8. RandomAccessFile类理解

    一.简述 这个是JDK上的截图,我们可以看到它的父类是Object,没有继承字节流.字符流家族中任何一个类.并且它实现了DataInput.DataOutput这两个接口,也就意味着这个类既可以读也可 ...

  9. 基于mindwave脑电波进行疲劳检测算法的设计(3)

    这一节我将讲解thinkgear.h 里面的函数和宏定义.这一些都可以在MindSet Development Tools\ThinkGear Communications Driver\docs\h ...

  10. Linux下库打桩机制分析 function Interposition

    [时间:2017-08] [状态:Open] [关键词:linux, libray,打桩,interposition,函数替换,链接器,gcc,malloc,free] 0 引言 本文主要参考< ...