zoukankan      html  css  js  c++  java
  • 对时间按指定时间段进行分组,可用于并发度计算

    #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

    输出:

      

  • 相关阅读:
    Java暑期学习第四十天日报
    Java暑期学习第三十七天日报
    Java暑期学习第三十八天日报
    Java暑期学习第三十三天日报
    Java学习第五周汇报
    Windows窗体控件扩展TreeView实例
    ADO.NET:从数据集更新数据库
    如何在加载winform的时候自动改变treeview的指定根节点的字体颜色呢??
    9月15日
    扩展DropDownList控件和ListBox控件(1) 支持分组功能(optgroup标签)
  • 原文地址:https://www.cnblogs.com/foreverstars/p/5821993.html
Copyright © 2011-2022 走看看