C/C++判断传入的UTC时间是否在今天
在项目中经常会显示一个时间,如果这个时间在今日内就显示为时分秒,否则显示为年月日。
这里先给出一个正确的版本:
#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时间是否在今天的更多相关文章
- 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 重点: 实现多级子目录的压缩, ...
- Linux与Windows中的UTC时间
Linux与Windows中的UTC时间 先介绍几个术语 UTC 协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“Temp ...
- 关于UTC时间和本地时间
收藏了个类Publics 可以实现本地时间和UTC时间的转换 UCT时间=本地时间-8 本地时间比UTC时间快8小时 element-ui的日期选择器上 选择的时间显示的是本地时间 但实 ...
- QDateTime 本地时间和UTC时间转换问题
先说一下UTC,搜索360百科: 协调世界时,又称世界统一时间.世界标准时间.国际协调时间,简称UTC,是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统.1979年12月3日在内瓦举行 ...
- 关于时间:UTC时间、GMT时间、本地时间、Unix时间戳
1.UTC时间 与 GMT时间我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的. 2.UTC时间 与 本地时UTC + 时区差 = 本地时间时区差东 ...
- Python: 处理mongodb文档,怎么让UTC时间转换为本地时间?
存储数据到MongoDB数据库时,一般我们会加一个更新数据的时间update_time.这时在python代码中 会用到datetime模块以便获取当前系统时间,但是存入到MongoDB数据库时,存储 ...
- Js 日期转换函数(UTC时间转换及日期想加减)
IOS上Js日期转换中new Date("yyyy-mm-dd")不能正常工作,必须使用new Date("yyyy/MM/dd"); 日期相加减: Date. ...
- JS将指定的时间戳转为UTC时间
Js中获取时间戳可用var dayMiliseconds = parseInt(new Date().valueOf());Js的时间戳单位为毫秒(1s = 1000 ms),下面是一个将制定的格式转 ...
- CloudStack中云主机的UTC时间转为本地时间
CloudStack项目中使用的时间是UTC时间,具体什么是UTC时间大家可以百度,但是我们需要的时间是正常的时间,所以在国泰君安开发测试云中,同步资源管理中虚拟机的同步管理,需要对虚拟机的时间格式化 ...
随机推荐
- 常见爬虫/BOT 对抗技术简介(二)
上一篇文章分别从网络协议,Robots文件,JS渲染,行为分析等多方面讲了些“反爬虫”,“反-反爬虫”技术. 点击查看:<常见爬虫/BOT 对抗技术简介(一)> 本文将主要介绍各种IP地址 ...
- mysql5.7报err 1055错误 sql_mode=only_full_group_by
vim /etc/my.cnf 末尾增加 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_B ...
- python 生成requirements.txt
生成requirements.txt文件 pip freeze > requirements.txt 安装requirements.txt依赖 pip install -r requiremen ...
- Android关于log日志,华为不输出log.v,log.d(zz)
[java] view plain copy 我用的是mate8,本来虚拟机测试一点日志一点问题没有 [java] view plain copy 但是真机测试发现log.d一直不输出,正好又试了lo ...
- XMPP增加删除好友
在现阶段的通信服务中,各种标准都有,因此会出现无法实现相互连通,而XMPP(Extensible Message and presence Protocol)协议的出现,实现了整个及时通信服务协议的互 ...
- 实录分享 | 计算未来轻沙龙:揭秘AutoML技术(视频 + PPT)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/83542784 10 月 27 日 ...
- Window 任务栏清除历史记录
Window任务栏上的历史记录在很多情况下是很方便的[可以很快速的执行命令] 但如果历史记录太多可能会影响使用,经过我N长时间的研究和网络上的搜索 终于找到了清除的方法,网络上通过IE删除等方式都是无 ...
- NModbus类库使用
通过串口进行通信 : 1.将 NMobus 类库导入工程中,添加引用.命名空间.工程属性必须配置 为 .NET 4.0. 2.创建 SerialPort 类的一个实例,配置参数,打开串口,如: pub ...
- git的使用笔记
1.git下载:https://git-scm.com/downloads 安装git 2.在github.com网站上注册账号 网址:https://github.com/ 3.使用gi ...
- 为什么用svg放弃了iconfont?
svg替代iconfont的好处(无论是基于Vue.Jquery),都推荐svg http://www.woshipm.com/pd/463866.html svg图标库,svg图标在线制作 http ...