设为首页 加入收藏

TOP

C++使用localtime函数需注意
2013-01-01 14:46:29 来源: 作者: 【 】 浏览:294
Tags:使用 localtime 函数 注意

    在处理时间时用到了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 );

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中用mciSendString播放音乐 下一篇自定义命名空间和使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: