(windows与Ubuntu下相同时间转化为时间戳不一样)踩坑

基于drogon框架

bool isTime(std::string str) {

   

    std::regex pattern("(\\d{4})-(0\\d{1}|1[0-2])-(0\\d{1}|[12]\\d{1}|3[01])\\s(0\\d{1}|1\\d{1}|2[0-3]):[0-5]\\d{1}:([0-5]\\d{1})");

    if(!regex_match(str, pattern)){

        return false;

    }

        int year = stoi(str.substr(0, 4));

        int month = stoi(str.substr(5, 2));

        int day = stoi(str.substr(8, 2));

        int hour = stoi(str.substr(11,2));

        int minute = stoi(str.substr(14,2));

        int second = stoi(str.substr(17,2));

        if(year >= 1900 && month > 0 && month < 13 && hour < 25 && minute < 61 && second < 61){

        switch(month){

            case 1:

            case 3:

            case 5:

            case 7:

            case 8:

            case 10:

            case 12: {

                if(day > 31){

                    return false;

                }

                break;

            }

            case 4:

            case 6:

            case 9:

            case 11: {

                if (day > 30) {

                    return false;

                }

                break;

            }

            default:break;

        }

        if(month == 2) {

            if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) {

                if(day > 29) {

                    return false;

                }

            }

            else {

                if(day > 28){

                    return false;

                }

            }

        }

    }else{

        return false;

    }

    return true;

}

time_t stringToTime(std::string timeStr){

  struct tm timeinfo;

    std :: time_t time1 = std::time(0);

    strptime(timeStr.c_str(), "%Y-%m-%d %H:%M:%S",&timeinfo);

    time_t timeStamp = mktime(&timeinfo);

    std::cout <<  timeinfo.tm_year <<"-" << timeinfo.tm_mon <<"-" << timeinfo.tm_mday <<" " << timeinfo.tm_hour <<":"<< timeinfo.tm_min <<":"<< timeinfo.tm_sec <<"   second"<<std::endl;

    return timeStamp;

}

void videoManagerController::quaryByPeriod(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback ){

    std::system("chcp 65001");

    LOG_INFO << "quaryByPeriod";

    std::string startTime = req->getParameter("startTime");

    std::string endTime = req->getParameter("endTime");

    if(isTime(startTime)){

    time_t startTime_num = stringToTime(startTime);  

    LOG_INFO <<startTime_num<< "quaryByPeriod";

    std::cout << startTime_num <<"   time1" << std::endl;


 

    }

发现时间戳一直不对,原因是因为我的Ubuntu的时区是PDT,生成时间戳与时区有关,因此设置为shanghai 时区即可,具体步骤如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值