本帖最后由 聆听静静 于 2016-11-18 15:47 编辑

不废话。直接上代码

  1. --计算时间的相关常量
  2. local monthList1 = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};        --平年
  3. local monthList2 = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};        --闰年
  4. local fourYearDayNum = 365 + 365 + 366 + 365;        --每个四年的总天数
  5. local daySecNum = 24 * 3600;        --每天的秒数

  6. --获取当前时间 计算时区
  7. function ClockManger.getDate(nTime, timezone)
  8.         if not nTime then
  9.                 nTime = ClockManger.getTime();
  10.         end
  11.         if not timezone then
  12.                 timezone = ClockManger.timezone;
  13.         end
  14.         nTime = nTime + (timezone * 60 * 60);

  15.         local nDays = math.floor(nTime / daySecNum) + 1;        --time函数获取的是从1970年以来的毫秒数,因此需要先得到天数
  16.         local nYear4 = math.floor(nDays / fourYearDayNum);        --得到从1970年以来的周期(4年)的次数
  17.         local nRemain = nDays % fourYearDayNum;        --得到不足一个周期的天数
  18.         local nDesYear = 1970 + nYear4 * 4;
  19.         local nDesMonth = 0;
  20.         local nDesDay = 0;
  21.         local nWDay = (nDays + 4) % 7; --1970年1月1日星期4
  22.         if nWDay == 0 then nWDay = 7 end --0就是7
  23.         local bLeapYear = false;
  24.         
  25.         --1972 是闰年 所以在第三年
  26.         if nRemain < 365 then --一个周期内,第一年  平年
  27.         elseif nRemain < 365 + 365 then --一个周期内,第二年  平年
  28.                 nDesYear = nDesYear + 1;
  29.                 nRemain = nRemain - 365;
  30.         elseif nRemain < 365 + 365 + 366 then --一个周期内,第三年  闰年
  31.                 nDesYear = nDesYear + 2;
  32.                 nRemain = nRemain - 365 - 365;
  33.                 bLeapYear = true;
  34.         else --一个周期内,第四年 平年
  35.                 nDesYear = nDesYear + 3;
  36.                 nRemain = nRemain - 365 - 365 - 366;
  37.         end
  38.         
  39.         local nYDay = nRemain; --当年的第几天
  40.         local pMonths = bLeapYear and monthList2 or monthList1;
  41.         --循环减去12个月中每个月的天数,直到剩余天数小于等于0,就找到了对应的月份
  42.         for i=1,12 do
  43.                 local nTemp = nRemain - pMonths;
  44.                 if nTemp <= 0 then
  45.                         nDesMonth = i;
  46.                         if nTemp == 0 then --表示刚好是这个月的最后一天,那么天数就是这个月的总天数了
  47.                                 nDesDay = pMonths;
  48.                         else
  49.                                 nDesDay = nRemain;
  50.                         end
  51.                         break;
  52.                 end
  53.                 nRemain = nTemp;
  54.         end

  55.         local hms = nTime % daySecNum;
  56.         local hour = math.floor(hms / 3600)
  57.         local min = math.floor((hms % 3600) / 60)
  58.         local sec = (hms % 3600) % 60
  59.         return {year=nDesYear, month=nDesMonth, day=nDesDay, yday=nYDay, wday=nWDay, hour=hour, min=min, sec=sec}
  60. end
复制以上内容
收藏
0 条回帖
需要登陆后才可进行回复 登录

返回顶部
现在加入我们,注册一个账号 账号登陆 QQ账号登陆 微博账号登陆

微信扫一扫,马上找工作

在线客服