自己写 localtime 函数(含完整注释,代码)
2005-05-23 01:19
323 查看
//对时间转换有兴趣的可以看看。
//曾在某平台下多线程中使用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; } |
相关文章推荐
- 自己写 localtime 函数(含完整注释,代码)
- 自己写 localtime 函数(含完整注释,代码)转载
- 自己模拟strlen库函数写的功能函数my_strlen实现strlen的功能,完整代码
- 自己模拟strcmp库函数写的功能函数my_strcmp实现strcmp的功能,完整代码
- 自己模拟strcpy库函数写的功能函数my_strcpy实现strcpy的功能,完整代码
- Linux-fork()函数详解,附代码注释
- 怎样在代码中使用Debug的调试?另外附带完整的使用流程------OutputDebugString函数
- 自己写的 仿assert宏和仿 _assert()函数(附代码)
- ASP.Net 2.0 窗体身份验证机制-转+自己代码注释示例与更详细的说明
- ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行
- C#新手入门代码 类的函数成员的参数是类自己的实例(很有趣的例子)
- uboot中C语言代码入口函数(start_armboot)的注释
- qsort函数用法 (自己加了注释)
- 最基本的C++ 窗口程序代码及完整注释
- linux下SO中INIT函数中添加自己的代码
- 模仿JQuery.extend函数扩展自己对象的js代码
- Android Studio 中两种方式定制自己的代码注释头
- ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行
- 【安装】VS2010中为类、函数代码添加版权注释信息
- ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行