Linux源码中的mktime算法解析

我们知道,从CMOS中读出来的系统时间并不是time_t类型,而是类似于struct tm那样,年月日时分秒是分开存储的。

那么,要把它转化为系统便于处理的time_t类型,就需要算法进行转换。

我们都知道我们的公历还是比较复杂的,有大月小月,有闰年非闰年,处理起来会很麻烦。

但是Linux的源代码仅仅用了短短的几行就完成了这个复杂的转换(Gauss算法),实在令人惊奇。话不多说,先看源代码:

include/linux/time.h

static inline unsigned long mktime( unsigned int year, unsigned int mon,
unsigned int day, unsigned int hour,
unsigned int min, unsigned int sec)
... {
if(0>=(int)(mon-=2))...{/**//*1..12->11,12,1..10*/
mon
+=12;/**//*PutsFeblastsinceithasleapday*/
year
-=1;
}


return(((
(unsigned
long)(year/4-year/100+year/400+367*mon/12+day)+
year
*365-719499
)
*24+hour/**//*nowhavehours*/
)
*60+min/**//*nowhaveminutes*/
)
*60+sec;/**//*finallyseconds*/
}

更多相关文章

  1. sqlserver,mysql,oracle通用的模拟和改进的全文搜索算法
  2. SQL关键字转换大写核心算法实现
  3. Android开源 - Luban(鲁班)可能是最接近微信朋友圈的图片压缩算
  4. [置顶] android加密解密算法之3DES算法用例
  5. 算法 - 给出一个字符串str,输出包含两个字符串str的最短字符串,如
  6. java基础---一致性hash算法
  7. java-信息安全(三)-PBE加密算法
  8. 蓝桥杯 ALGO-53 算法训练 最小乘积(基本型)
  9. 算法笔记_138:稳定婚姻问题(Java)

随机推荐

  1. Android: Listen outgoing/incoming call
  2. android gpuimage显示的缩放和剪裁模式
  3. Android中的Parcelable接口
  4. Android弹窗
  5. Android版本对照
  6. 组件居中显示 安卓
  7. Eclipse 运行Android程序在虚拟机中,出现
  8. android源代码下载及编译
  9. Android图文布局【整理】
  10. Android(安卓)开源项目分类汇总