C++使用localtime函数需要注意的地方
2015-10-19 09:07
731 查看
在处理时间时用到了localtime这个函数,将一个UTC时间转为本地时间: [cpp] #include <time.h> time_t tmNow = time(NULL); tm *ptmNow = localtime(&tmNow); //从tm结构体中可以取到年月日时分秒等值。 这里localtime返回了一个tm指针,空间是由localtime自己控制的,所以如果连续调用这个函数会有问题。 很多时候我们会同时处理两个时间,例如表示时间段的【起始时间】【结束时间】,代码如下: [cpp] time_t tmBegin = 1351118531; //2012-10-25 06:42:11 time_t tmEnd = 1351218731; //2012-10-26 10:32:11 tm* ptmBegin = localtime(&tmBegin ); tm* ptmEnd = localtime(&tmEnd );//第二次调用会修改上次调用的tm结构体,若上次的数据未保存则会丢失 //tm* ptm3 = gmtime(&tmEnd ); //效果同上条语句,也会重写之前的数据 char ctmBegin1[26], ctmEnd[26]; strftime(ctmBegin, 26, "%Y%m%d%H%M%S", ptmBegin); //这里输出的将是tmEnd的时间值 strftime(ctmEnd, 26, "%Y%m%d%H%M%S", ptmEnd); /*MSDN中有相关说明: Both the 32-bit and 64-bit versions ofgmtime, mktime, mkgmtime, and localtimeall use a single tm structure per thread for the conversion. Each call to one of these routines destroys the result of the previous call. */ 所以要记住,一旦调用了localtime函数,应该马上取出tm结构中的内容: [cpp] time_t tmBegin = 1351118531; //2012-10-25 06:42:11 time_t tmEnd = 1351218731; //2012-10-26 10:32:11 char ctmBegin1[26], ctmEnd[26]; tm* ptmBegin = localtime(&tmBegin ); strftime(ctmBegin, 26, "%Y%m%d%H%M%S", ptmBegin); tm* ptmEnd = localtime(&tmEnd ); strftime(ctmEnd, 26, "%Y%m%d%H%M%S", ptmEnd); //tm* ptm3 = gmtime(&tmEnd );
相关文章推荐
- Beautiful Array
- C++习题三12题
- C++习题三10、11题
- 初学者C++学习笔记 零碎小知识点
- Leetcode Subsets
- 关键字volatile在c语言下的理解
- windows下使用vim(gVim)和gcc(MinGW):C/C++/Fortran/ObjC/Ada Compiler
- C语言学习—动态内存分配
- C++ STL学习之stack
- C++ 动态库&静态库创建和使用
- C语言面试宝典
- 链表
- C/C++常见概念辨析
- 10个数中取最大(初)
- 文章标题
- 100到200之间的素数输出(改)
- STL之hashtable实现
- 交换两个数内容,无临时变量(初)
- 【C++】读取循环数字和cin的利用
- 有N个人顺序排开参加比赛,每个人可以看到自己左右两边比自己得分少的人的分数,最少的人可以得1W的奖金,并且奖金以1w递增,赛委会让大家看到得分比自己少的人得的钱比自己少,编写程序求赛委会至少准备多少钱