#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