时间关系函数

在这里插入图片描述

//viminfo文件中匹配	文件中的某行:*	1590632880	0
string temp = buf;//将上述举例行存入temp
std::smatch sma;
std::regex rex(".*?(\\d+).*?0");
bool ret = std::regex_search(temp,sma,rex);
tm *t_tm;
time_t timer;
//匹配到的1590632880
timer = std::stoi(string(sma[1]));
//将1900年到现在的秒数转换为本地时间
t_tm = localtime(&timer);
//等同于spritf如下
strftime(time, sizeof(time), "%Y-%m-%d %H:%M:%S",t_tm);
//sprintf(time,"%d-%02d-%02d %02d:%02d:%02d",t_tm->tm_year+1900,t_tm->tm_mon+1,t_tm->tm_mday,t_tm->tm_hour,t_tm->tm_min,t_tm->tm_sec);
输出:2020-05-28 10:28:00

从UTC的年月日时分秒格式转换为东八区北京的年月日时分秒格式,mktime好像对于时区没有区分,我测试了一下,获取的时间还是UTC时间
mktime(utc time)–>localtime()–>结果还是本地

所以自己写一个UTC的年月日时分秒格式转换为东八区北京的年月日时分秒格式
思路简单:闰年平年每个月多少天

void ToolFun::UtcToLocaltime(string &Localtime,const char* date)
{
    char time[24] = "";
    int year = 0,month = 0,day = 0,hour = 0,min = 0,sec = 0;
    //每个月有多少天
    int maxday = 0;
    
    year = atoi(date);
    month = atoi(date + 5);
    day = atoi(date + 8);
    //Beijing Time
    hour = atoi(date + 11) + 8;
    min = atoi(date + 14);
    sec = atoi(date + 17);

    if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
    {
        maxday = 31;
    }
    else if(month == 4 || month == 6 || month == 9 || month == 11)
    {
        maxday = 30;
    }
    else
    {
   		//闰年的2月为29天,平年为28天
        if((year % 400 == 0)||(year % 4 == 0 && year % 100 != 0))
            maxday = 29;
        else
            maxday = 28;
    }
    //+8超过24点
    if(hour >= 24)
    {
        hour -= 24;
        day += 1;
        //超过24点加一天若超过这个月的最后一天
        if(day > maxday)
        {
            day -= maxday;
            month += 1;
            //超过12个月加一年
            if(month > 12)
            {
                month -= 12;
                year += 1;
            }
        }
    }
    sprintf(time,"%d-%02d-%02d %02d:%02d:%02d",year,month1,day,hour,min,sec);
    Localtime = time;
    return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值