• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            專職C++

            不能停止的腳步

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(28)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            由于開發(fā)游戲服務(wù)器,常常會(huì)用到各種時(shí)間判斷。這里就在原有的標(biāo)準(zhǔn)C時(shí)間函數(shù)上做了一些擴(kuò)展,使他可以方便的用在游戲中。希望能對你有用:)
            如果涉及到時(shí)候,請?jiān)诔绦騿?dòng)的時(shí)候,先運(yùn)行tzset()。這個(gè)函數(shù)會(huì)設(shè)置時(shí)間函數(shù)的全局變量timezone。下面有些函數(shù)用到了,請注意!
            注意:C++Builder使用mktime,有bug!使用C++Builder的同志們要注意!
            (更新說明,函數(shù)有所調(diào)整,更新隨筆)
            2016-3-14日更新

                    ///取當(dāng)前服務(wù)器的UTC時(shí)間
                    inline second_time_t get_utc_time()
                    {
                        return second_time_t(time(NULL));
                    }
                    ///取本地當(dāng)前時(shí)間
                    /**
                        utc時(shí)間扣除時(shí)區(qū)
                     
            */
                    inline second_time_t get_local_now()
                    {
                        return get_utc_time() - timezone;
                    }
                    //取當(dāng)前最小為hour的時(shí)間 也就是分和秒為0的時(shí)間
                    inline second_time_t get_utc_hour_time()
                    {
                        second_time_t stNow = get_utc_time();
                        return stNow - stNow % SECONDS_PRE_HOUR;
                    }
                    //取指定時(shí)間小時(shí)時(shí)間 也就是分和秒為0的時(shí)間
                    inline second_time_t get_utc_hour_time(second_time_t paramTime)
                    {
                        return paramTime - paramTime % SECONDS_PRE_HOUR;
                    }
                    ///取UTC時(shí)間對應(yīng)的本地時(shí)間時(shí)間結(jié)構(gòu)
                    /**
                        @param [in] paramUTCTime 指定的UTC時(shí)間
                        @param [out]  paramResult 取得的時(shí)間結(jié)果
                        @return struct tm * 時(shí)間結(jié)果
                     
            */
                    inline struct tm * get_localtime(second_time_t paramUTCTime, struct tm * paramResult)
                    {
                        time_t t = paramUTCTime;
                        *paramResult = *localtime(&t);
                        return paramResult;
                    }
                    ///將utc時(shí)間,轉(zhuǎn)換成相應(yīng)的本地時(shí)間
                    /**
                       對應(yīng)的逆函數(shù)是 to_utc_time
                       @param [in] paramUTCTime UTC時(shí)間
                       @return second_time_t 對應(yīng)的本地時(shí)間
                     
            */
                    inline second_time_t to_local_time(second_time_t paramUTCTime)
                    {
                        return paramUTCTime - timezone;
                    }
                    ///生成時(shí)間
                    /**
                        參數(shù)是本地時(shí)間,返回的是UTC時(shí)間
                        @param [in] paramLocalTM 本地實(shí)際時(shí)間結(jié)構(gòu)
                        @return second_time_t 對應(yīng)的UTC時(shí)間
                     
            */
                    inline second_time_t make_time(struct tm * paramLocalTM)
                    {
                        return second_time_t(mktime(paramLocalTM));
                    }
                    ///將本地時(shí)間轉(zhuǎn)變成utc時(shí)間
                    /**
                        對應(yīng)的逆函數(shù)是 to_local_time
                        @param [in] paramLocalTime 本地時(shí)間
                        @return second_time_t 對應(yīng)的UTC時(shí)間
                     
            */
                    inline second_time_t to_utc_time(second_time_t paramLocalTime)
                    {
                        return paramLocalTime + timezone;
                    }
                    ///取本地時(shí)間對應(yīng)的時(shí)間結(jié)構(gòu)
                    /**
                        @param [in] paramLocalTime 指定的本地時(shí)間
                        @param [out]  paramResult 取得的時(shí)間結(jié)果
                        @return struct tm * 時(shí)間結(jié)果
                     
            */
                    inline struct tm * get_localtime_by_local(second_time_t paramLocalTime, struct tm * paramResult)
                    {
                        time_t t = to_utc_time(paramLocalTime);
                        *paramResult = *localtime(&t);
                        return paramResult;
                    }

                    ///判斷時(shí)間是不是同一天
                    inline bool is_same_day(second_time_t paramUTCT1, second_time_t paramUTCT2)
                    {
                        return (to_local_time(paramUTCT1) / SECONDS_PRE_DAY) == (to_local_time(paramUTCT2) / SECONDS_PRE_DAY);
                    }
                    ///取本周一零點(diǎn)時(shí)間
                    /**
                        @param [in] paramUTCTime 指定的utc時(shí)間
                        @return second_time_t 周一零點(diǎn)的utc時(shí)間
                     
            */
                    inline second_time_t get_local_monday_zero_time(second_time_t paramUTCTime)
                    {
                        struct tm tNow;
                        get_localtime(paramUTCTime, &tNow);

                        int iWeekDay = tNow.tm_wday;
                        if (iWeekDay == 0)  //如果是星期天
                        {
                            iWeekDay = 6;
                        }
                        else
                        {
                            iWeekDay --;
                        }
                        second_time_t stLocal = to_local_time(paramUTCTime);
                        stLocal = stLocal - (stLocal % SECONDS_PRE_DAY) - iWeekDay * SECONDS_PRE_DAY;
                        return to_utc_time(stLocal);
                    }

                    //是否是禮拜六和禮拜天
                    inline bool is_weekend_day(second_time_t paramUTCTime)
                    {
                        second_time_t stMondayTime = get_local_monday_zero_time(paramUTCTime);
                        return paramUTCTime >= stMondayTime + SECONDS_PRE_DAY * 5;
                    }





                    //判斷是不是同一個(gè)星期
                    inline bool is_same_week(second_time_t paramUTCTime1, second_time_t paramUTCTime2)
                    {
                        return get_local_monday_zero_time(paramUTCTime1) == get_local_monday_zero_time(paramUTCTime2);
                    }

                    //計(jì)算相差的天數(shù)
                    inline int calc_diff_days(second_time_t paramUTCT1, second_time_t paramUTCT2)
                    {
                        return int(to_local_time(paramUTCT1) / SECONDS_PRE_DAY) - (to_local_time(paramUTCT2) / SECONDS_PRE_DAY);
                    }
                    //計(jì)算是不是同一個(gè)月
                    inline bool is_same_month(second_time_t paramUTCT1, second_time_t paramUTCT2)
                    {
                        struct tm t1;
                        struct tm t2;
                        get_localtime(paramUTCT1, &t1);
                        get_localtime(paramUTCT2, &t2);
                        return (t1.tm_year == t2.tm_year) && (t1.tm_mon == t2.tm_mon);
                    }
                    //取指定時(shí)間的0點(diǎn)時(shí)間
                    inline second_time_t get_zero_time(second_time_t paramUTC)
                    {
                         second_time_t stLocal = to_local_time(paramUTC);
                         return to_utc_time(stLocal - (stLocal % SECONDS_PRE_DAY));
                    }

                    //cxy 取指定時(shí)間的0點(diǎn)時(shí)間
                    inline second_time_t get_day_second()
                    {
                        auto utc = get_utc_time();
                        auto zt = get_zero_time(utc);
                        return utc - zt;
                    }

                    //取定本地時(shí)間 下一天0點(diǎn) 對應(yīng)的UTC時(shí)間
                    inline second_time_t get_next_day_zero_time(second_time_t paramUTC)
                    {
                        struct tm t;
                        get_localtime(paramUTC, &t);
                        t.tm_mday++;
                        t.tm_hour = 0;
                        t.tm_min = 0;
                        t.tm_sec = 0;
                        return make_time(&t);
                    }

                    //取定本地時(shí)間 下一周0點(diǎn) 對應(yīng)的UTC時(shí)間
                    inline second_time_t get_next_week_zero_time(second_time_t paramUTC)
                    {
                        struct tm t;
                        get_localtime(paramUTC, &t);

                        int day = 7 - t.tm_wday;
                        t.tm_mday += day;
                        t.tm_hour = 0;
                        t.tm_min = 0;
                        t.tm_sec = 0;
                        return make_time(&t);
                    }

                    //取定本地時(shí)間 下一幾的0點(diǎn) 對應(yīng)的UTC時(shí)間
                    inline second_time_t get_next_week_time(second_time_t paramUTC,int day)
                    {
                        struct tm t;
                        get_localtime(paramUTC, &t);

                        t.tm_hour = 0;
                        t.tm_min = 0;
                        t.tm_sec = 0;

                        //同一天
                        if (t.tm_wday == day)
                            return get_next_week_time(paramUTC + SECONDS_PRE_DAY, 1);

                        while (t.tm_wday != day)
                        {
                            t.tm_wday += 1;
                            t.tm_wday %= 7;
                            t.tm_mday += 1;
                        }

                        return make_time(&t);
                    }

                    //取指定本地時(shí)間 當(dāng)前月1號0點(diǎn) 對應(yīng)的UTC時(shí)間
                    inline second_time_t get_month_1_day_zero_time(second_time_t paramUTC)
                    {
                        struct tm t;
                        get_localtime(paramUTC, &t);
                        t.tm_mday    = 1;
                        t.tm_hour    = 0;
                        t.tm_min    = 0;
                        t.tm_sec    = 0;
                        return make_time(&t);
                    }
                    //取指定本地時(shí)間,下個(gè)月1號0點(diǎn) 對應(yīng)的UTC時(shí)間
                    inline second_time_t get_next_month_1_day_zero_time(second_time_t paramUTC)
                    {
                        struct tm t;
                        get_localtime(paramUTC, &t);
                        t.tm_mon++;
                        if (t.tm_mon > 11)
                        {
                            t.tm_year++;
                            t.tm_mon = 0;
                        }
                        t.tm_mday = 1;
                        t.tm_hour = 0;
                        t.tm_min = 0;
                        t.tm_sec = 0;
                        return make_time(&t);
                    }
            posted on 2013-06-27 12:09 冬瓜 閱讀(2583) 評論(1)  編輯 收藏 引用 所屬分類: 原創(chuàng)linux

            Feedback

            # re: 一些常用的時(shí)間函數(shù) 2013-06-27 12:12 冬瓜
            注意:C++Builder使用mktime,有bug!使用C++Builder的同志們要注意!  回復(fù)  更多評論
              

            伊人久久五月天| 亚洲∧v久久久无码精品| 久久精品aⅴ无码中文字字幕不卡| 国产福利电影一区二区三区,免费久久久久久久精 | 久久www免费人成看片| 久久精品国产99国产精品| 东京热TOKYO综合久久精品| 无码人妻久久一区二区三区 | 九九久久自然熟的香蕉图片| 久久久这里只有精品加勒比 | 久久婷婷国产剧情内射白浆| 欧美一区二区久久精品| 老男人久久青草av高清| 人妻无码精品久久亚瑟影视 | 久久久久无码精品国产| 伊人久久大香线蕉av一区| 色偷偷久久一区二区三区| 久久青青草原精品国产| 91久久精一区二区三区大全| 国产欧美一区二区久久| 曰曰摸天天摸人人看久久久| 国内精品久久久久影院网站| 久久久受www免费人成| 亚洲欧美国产精品专区久久 | 午夜精品久久久久久久久| 亚洲精品乱码久久久久久蜜桃不卡| 无码专区久久综合久中文字幕 | 一本久久a久久精品综合夜夜| 热久久这里只有精品| 久久影院亚洲一区| 久久精品国产免费观看三人同眠| 久久夜色精品国产亚洲| 久久99国产综合精品| 精品一久久香蕉国产线看播放 | 亚洲AV无码久久精品色欲 | 亚洲一本综合久久| 亚洲欧美国产精品专区久久 | 久久久精品一区二区三区| 久久久久亚洲AV成人网| 少妇久久久久久久久久| 狠狠人妻久久久久久综合蜜桃|