由于业务需要,需要将“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的互相转换