C++,将UTC时间转为时间戳

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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值