基于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 时区即可,具体步骤如下: