long conver_utctime(uint32_t utc_date, uint64_t utc_time) {
if (utc_date == 10170) {
return 0;
}
char utcDate[16] = {0};
sprintf(utcDate, "%06d", utc_date);//260723
char utcTime[16] = {0};
sprintf(utcTime, "%09ld", utc_time);//052239000
if (strlen(utcTime) == 9 && strlen(utcDate) == 6) {
std::string utc_data_str = utcDate;
std::string utc_time_str = utcTime;
std::string utc_str = "20" +
utc_data_str.substr(4,2) + "-" +
utc_data_str.substr(2,2) + "-" +
utc_data_str.substr(0,2) + "T" +
utc_time_str.substr(0,2) + ":" +
utc_time_str.substr(2,2) + ":" +
utc_time_str.substr(4,2);
std::istringstream ss(utc_str);
std::tm tm = {};
ss >> std::get_time(&tm, "%Y-%m-%dT%H:%M:%S");
std::chrono::system_clock::time_point tp = std::chrono::system_clock::from_time_t(std::mktime(&tm)); // 将tm结构转换为时间戳
int64_t timestamp = std::chrono::duration_cast<std::chrono::seconds>(tp.time_since_epoch()).count(); // 将时间戳转换为毫秒数
auto local_clock = timestamp + 8*3600;
local_clock = local_clock*1000*1000;
return (local_clock);
}
return 0;
}
long conver_utctime_new(uint32_t utc_date, uint64_t utc_time) {
if (utc_date == 10170) {
return 0;
}
char utcDate[16] = {0};
sprintf(utcDate, "%06d", utc_date);//260723
char utcTime[16] = {0};
sprintf(utcTime, "%09ld", utc_time);//052239000
if (strlen(utcTime) == 9 && strlen(utcDate) == 6) {
struct tm _tm;
_tm.tm_year = (utcDate[4]-'0')*10+(utcDate[5]-'0')+100;
_tm.tm_mon = (utcDate[2]-'0')*10+(utcDate[3]-'0')-1;
_tm.tm_mday = (utcDate[0]-'0')*10+(utcDate[1]-'0');
_tm.tm_hour = (utcTime[0]-'0')*10+(utcTime[1]-'0');
_tm.tm_min = (utcTime[2]-'0')*10+(utcTime[3]-'0');
_tm.tm_sec = (utcTime[4]-'0')*10+(utcTime[5]-'0');
_tm.tm_isdst = -1;
time_t clock = mktime(&_tm);
auto local_clock = clock + 8*3600;
local_clock = local_clock*1000*1000;
return (local_clock);
}
return 0;
}