您的位置:首页 > 其它

对时间按指定时间段进行分组,可用于并发度计算

2016-08-30 14:47 141 查看
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;

unsigned long long strToull(const string & a_str)
{
#if defined (WIN32)
return strtoul(a_str.c_str(), NULL, 10);
#else
return strtoull(a_str.c_str(), NULL, 10);
#endif
}

vector<string> getGroupList(int a_iGroup, const string &a_strStartTime, const string &a_strEndTime)
{
time_t tStartTime = strToull(a_strStartTime.c_str());
time_t tEndTime = strToull(a_strEndTime.c_str());

//cout<<"begin "<<tStartTime<<" end "<<tEndTime<<endl;

struct tm tmNow;
tm* pTm = localtime_r(&tStartTime, &tmNow);

struct tm *tmNew = new tm();
*tmNew = *pTm;
tmNew->tm_min = int(pTm->tm_min/a_iGroup) * a_iGroup;
tmNew->tm_sec = 0;

char tmBuf[64];
memset(tmBuf, 0, sizeof(tmBuf));

strftime(tmBuf, 64, "%Y-%m-%d %H:%M:00", tmNew);

stringstream str;
str<<a_iGroup<<"-"<<tmBuf;

vector<string> valuelist;
valuelist.push_back(str.str());

time_t tBegin = mktime(tmNew) + a_iGroup * 60;
while(tBegin < tEndTime)
{
struct tm tmTime;
localtime_r(&tBegin, &tmTime);
memset(tmBuf, 0, sizeof(tmBuf));
strftime(tmBuf, 64, "%Y-%m-%d %H:%M:00", &tmTime);

stringstream strs;
strs<<a_iGroup<<"-"<<tmBuf;
valuelist.push_back(strs.str());

tBegin += a_iGroup * 60;
}

return valuelist;
}

int main(int argc, char* argv[])
{
int group = 1;
if(argc == 2)
{
group = atoi(argv[1]);
}
else
{
cout<<"help:"<<endl;
cout<<"    ./get group"<<endl;
return 0;
}

vector<string> valuelist = getGroupList(group, "1472111395", "1472112495");
for(vector<string>::iterator iter = valuelist.begin(); iter != valuelist.end(); ++iter)
{
cout<<"value is:"<<*iter<<endl;
}

return 0;
}


g++ getgrouplist.cpp -o get

输出:

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: