c++ time 转天,转点问题

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

int main(int args,char **agrv){
        time_t now=time(NULL);
        struct tm midnight;
        struct tm today=*localtime(&now);
        today.tm_mday=31;

        midnight = today;
        midnight.tm_hour = 0; midnight.tm_min = 0; midnight.tm_sec = 0;
        midnight.tm_mday += 1;
        int timec=mktime(&midnight);
        printf("mon=%d,day=%d \n",today.tm_mon+1,today.tm_mday);
        printf("mon=%d day=%d,timec=%d",midnight.tm_mon+1,midnight.tm_mday,timec);
        midnight.tm_mday -= 1;
       // timec=mktime(&midnight);
        printf("mon=%d,day=%d \n",today.tm_mon+1,today.tm_mday);
        printf("mon=%d day=%d,timec=%d",midnight.tm_mon+1,midnight.tm_mday,timec);
        midnight.tm_mday -= 1;
        timec=mktime(&midnight);
        printf("mon=%d,day=%d \n",today.tm_mon+1,today.tm_mday);
        printf("mon=%d day=%d,timec=%d",midnight.tm_mon+1,midnight.tm_mday,timec);

}

结果:

mon=5,day=31 
mon=6 day=1,timec=1685548800mon=5,day=31 
mon=6 day=0,timec=1685548800mon=5,day=31 
mon=5 day=30,timec=1685376000

如上结果:

        在结构体tm对象上直接修改诸如tm_day、tm_hour变量时,结果并不是想象中的会自动转点,转天,只会修改变量对应值。

        如果想,修改时间变量后,能够顺利转天,转点,一定要使用mktime()函数

注意:

mktime出来的结果最好用int64装

 

int 最大 2,147,483,647 就溢出了 2038-01-19 11:14:07

 uint 4,294,967,295  就溢出了 2106-02-07 14:28:15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值