自己写 localtime 函数(含完整注释,代码)

原创 2005年03月04日 11:14:00
自己写 localtime 函数(含完整注释,代码)

//对时间转换有兴趣的可以看看。



//曾在某平台下多线程中使用localtime库函数。可恶的是,每当程序运行
//一段时间后,都要出现内存泄露。查了数个夜晚为什么,无从断定。
//只能狠狠心,自己写了个localtimes,功能与localtime库函数相同。
//有了它以后,我就不再因内存泄露而烦恼了。
//要知道“内存泄露”是程序员大的一大耻辱。

//这个localtimes在多线程下已经运行了3年,还没发生问题,放心使用。

//一年中每个月的天数,非闰年
const char Days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

/*++------------------------------------------------------------------------

  Function:
              localtimes

Modification History

Jurassic           2002.1    Created.              
--------------------------------------------------------------------------*/
void
__stdcall
localtimes(
   time_t time,
   long timezone,
           struct tm *tm_time
)
{
    unsigned  __int32 n32_Pass4year;
              __int32 n32_hpery;

    //计算时差
    time=time-timezone;
    
    if(time < 0)
    {
       time = 0;
    }
    //取秒时间
    tm_time->tm_sec=(int)(time % 60);
    time /= 60;
    //取分钟时间
    tm_time->tm_min=(int)(time % 60);
    time /= 60;
    //取过去多少个四年,每四年有 1461*24 小时
    n32_Pass4year=((unsigned int)time / (1461L * 24L));
    //计算年份
    tm_time->tm_year=(n32_Pass4year << 2)+70;
    //四年中剩下的小时数
    time %= 1461L * 24L;
    //校正闰年影响的年份,计算一年中剩下的小时数
    for (;;)
    {
        //一年的小时数
        n32_hpery = 365 * 24;
        //判断闰年
        if ((tm_time->tm_year & 3) == 0)
{
            //是闰年,一年则多24小时,即一天
            n32_hpery += 24;
}
        if (time < n32_hpery)
{
            break;
}
        tm_time->tm_year++;
        time -= n32_hpery;
    }
    //小时数
    tm_time->tm_hour=(int)(time % 24);
    //一年中剩下的天数
    time /= 24;
    //假定为闰年
    time++;
    //校正润年的误差,计算月份,日期
    if ((tm_time->tm_year & 3) == 0)
    {
if (time > 60)
{
time--;
}
else
{
if (time == 60)
{
tm_time->tm_mon = 1;
tm_time->tm_mday = 29;
return ;
}
}
    }
    //计算月日
    for (tm_time->tm_mon = 0; Days[tm_time->tm_mon] < time;tm_time->tm_mon++)
    {
          time -= Days[tm_time->tm_mon];
    }

    tm_time->tm_mday = (int)(time);

    return;

}

相关文章推荐

彩色图像直方图均衡化及颜色直方图显示 opencv实现 完整代码及详细注释

结果预览: 原图片: 颜色直方图: 直方图均衡化后: 颜色直方图: 完整代码: 运行环境:Win7 64位 / opencv2.3 / vs2010 #include ...

练习6.1 上述getword函数不能正确处理下划线、字符串常量、注释及预处理器控制指令。请编写一个更完整的getword函数

函数getword,形参word与变量重名,既是输入也是输出,相似的还可见第114页struct point addpoint中的p1。这里写代码片...

微软官方的SQLHelper类(含完整中文注释)

using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect...

java初学者完整代码+注释5

  • 2010年03月19日 15:59
  • 3KB
  • 下载

java初学者完整代码+注释 8

  • 2010年03月19日 16:00
  • 13KB
  • 下载

微软的SQLHelper类(含完整中文注释)

using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Col...

java初学者完整代码+注释9

  • 2010年03月19日 16:03
  • 14KB
  • 下载

微软提供的SQLHelper类 含完整中文注释

微软的SQLHelper类(含完整中文注释)using System;using System.Data;using System.Xml;using System.Data.SqlClient;us...
  • sabic
  • sabic
  • 2011年07月25日 21:55
  • 1607

堆排序完整版,含注释

#include "stdafx.h" int arrNum[10] = {2,44,3,55,6,77,3,5,222,0xa}; #define LEFT(i) (2 * (i)) #defi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己写 localtime 函数(含完整注释,代码)
举报原因:
原因补充:

(最多只允许输入30个字)