一些常用的时间函数

由于开发游戏服务器,常常会用到各种时间判断。这里就在原有的标准C时间函数上做了一些扩展,使他可以方便的用在游戏中。希望能对你有用:)
         // typedef int second_time_t;   // 秒为单位的时间,如果位数不够,可以改成64位的
         // const int SECONDS_PRE_DAY = 86400;   // 每天的秒数 
         /// 取当前服务器的UTC时间
        inline second_time_t get_utc_time()
        {
             return second_time_t(time(NULL));
        }
         /// 取本地当前时间
         /* *
            utc时间扣除时区
         
*/
        inline second_time_t get_local_now()
        {
             return get_utc_time() - timezone;
        }

         /// 取UTC时间对应的本地时间时间结构
         /* *
            @param [in] paramUTCTime 指定的UTC时间
            @param [out]  paramResult 取得的时间结果
            @return struct tm * 时间结果
         
*/
        inline  struct tm * get_localtime(second_time_t paramUTCTime,  struct tm * paramResult)
        {
            time_t t = paramUTCTime;
            *paramResult = *localtime(&t);
             return paramResult;
        }
         /// 将utc时间,转换成相应的本地时间
         /* *
           对应的逆函数是 to_utc_time
           @param [in] paramUTCTime UTC时间 
           @return second_time_t 对应的本地时间
         
*/
        inline second_time_t to_local_time(second_time_t paramUTCTime)
        {
             return paramUTCTime - timezone;
        }
         /// 生成时间
         /* *
            参数是本地时间,返回的是UTC时间
            @param [in] paramLocalTM 本地实际结构 
            @return second_time_t 对应的UTC时间
         
*/
        inline second_time_t make_time( struct tm * paramLocalTM)
        {
             return second_time_t(mktime(paramLocalTM));
        }
         /// 将本地时间转变成utc时间
         /* *
            对应的逆函数是 to_local_time
            @param [in] paramLocalTime 本地时间
            @return second_time_t 对应的UTC时间
         
*/
        inline second_time_t to_utc_time(second_time_t paramLocalTime)
        {
             return paramLocalTime + timezone;
        }
         /// 取本地时间对应的时间结构
         /* *
            @param [in] paramLocalTime 指定的本地时间
            @param [out]  paramResult 取得的时间结果
            @return struct tm * 时间结果
         
*/
        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;
        }
         /// 判断时间是不是同一天
        inline  bool isSameDay(second_time_t paramUTCT1, second_time_t paramUTCT2)
        {
             return (to_local_time(paramUTCT1) / SECONDS_PRE_DAY) == (to_local_time(paramUTCT2) / SECONDS_PRE_DAY);     
        }
         /// 取本周一零点时间
         /* *
            @param [in] paramUTCTime 指定的utc时间
            @return second_time_t 周一零点的utc时间
         
*/
        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_same_week(second_time_t paramUTCTime1, second_time_t paramUTCTime2)
        {
             return get_local_monday_zero_time(paramUTCTime1) == get_local_monday_zero_time(paramUTCTime2); 
        }

         // 计算相差的天数
        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);     
        }
         // 计算是不是同一个月
        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);
        }
posted on 2013-06-27 12:09 冬瓜 阅读(1178) 评论(1)   编辑  收藏 引用 所属分类: 原创linux

Feedback

#  re: 一些常用的时间函数 2013-06-27 12:12 冬瓜
注意:C++Builder使用mktime,有bug!使用C++Builder的同志们要注意!   回复   更多评论
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值