C++ 字符形式的时间转换成时间戳

由于业务需要,需要将“20210906230600”的格式转换成可以比较的形式。当数值小的时候用atoll()函数就能直接转换,从而实现比较大小,但是由于转换的数值超过了空间,造成了溢出。

所以,用转换成时间戳的方式来得到时间差值。

// “20210906230600” -> 1630940760
time_t StringToDatetime(std::string str)
{
        tm tm_;                                    // 定义tm结构体。
        int year, month, day, hour, minute, second;// 定义时间的各个int临时变量。
        year = atoi((str.substr(0, 4)).c_str());
        month = atoi((str.substr(4, 2)).c_str());
        day = atoi((str.substr(6, 2)).c_str());
        hour = atoi((str.substr(8, 2)).c_str());
        minute = atoi((str.substr(10, 2)).c_str());
        second = atoi((str.substr(12, 2)).c_str());

        tm_.tm_year = year - 1900;                 // 年,由于tm结构体存储的是从1900年开始的时间,所以tm_year为int临时变量减去1900。      
        tm_.tm_mon = month - 1;                    // 月,由于tm结构体的月份存储范围为0-11,所以tm_mon为int临时变量减去1。
        tm_.tm_mday = day;                         // 日。
        tm_.tm_hour = hour;                        // 时。
        tm_.tm_min = minute;                       // 分。
        tm_.tm_sec = second;                       // 秒。
        tm_.tm_isdst = 0;                          // 非夏令时。
        time_t t_ = mktime(&tm_);                  // 将tm结构体转换成time_t格式。
        return t_;                                 // 返回值。
}
time_t t_terminal_time = StringToDatetime(terminal_time);
time_t t_strnowdate_time = StringToDatetime(strnowdate);
time_t t_t = abs(t_terminal_time - t_strnowdate_time); //时间差

参考文章:
C++ time_t与string的互相转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值