unix timestamp 与 可视化时间/常规时间进行转换。
最近工作中需要根据可视化时间得到unix timestamp,完成工作之后记录下来了,防止下次遇到此问题时,又需要重新梳理,直接上代码了
:
#include <iostream>
#include <string>
#include <ctime>
#include <string.h>void unix_timestamp_2_str(long timestamp, char strTime[], int bufLen) {struct tm tm = *localtime((time_t *)×tamp);strftime(strTime, bufLen - 1, "%Y-%m-%d %H:%M:%S", &tm);strTime[bufLen - 1] = '\0';
}time_t strtime_2_unix_timestamp(const char *timestamp) {struct tm tm;memset(&tm, 0, sizeof(tm));sscanf(timestamp, "%d-%d-%d %d:%d:%d", &tm.tm_year, &tm.tm_mon, &tm.tm_mday,&tm.tm_hour, &tm.tm_min, &tm.tm_sec);tm.tm_year -= 1900;tm.tm_mon--;return mktime(&tm);
}int main () {char strTime[100] = {0};long now_timestamp = 1619716862;unix_timestamp_2_str(now_timestamp, strTime, sizeof(strTime));std::cout << "timestamp=" << now_timestamp << " ---> strTime=" << strTime << std::endl;std::string strtime("2021-04-29 17:21:02");time_t timestamp = strtime_2_unix_timestamp(strtime.c_str());std::cout << "timestamp = " << timestamp << "----> strtime=" << ctime(×tamp) << std::endl;return 0;
}
结果如下:
timestamp=1619716862 ---> strTime=2021-04-29 17:21:02strtime=Thu Apr 29 17:21:02 2021---> timestamp = 1619716862
注意点:
(1)、timestamp的类型是long,与time_t一致。
(2)、unix timestamp是一个long类型的值,从1970年1月1日00:00::00到本时刻经历的second数。