Linux源码中的mktime算法解析
16lz
2021-01-22
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(((
(unsignedlong)(year/4-year/100+year/400+367*mon/12+day)+
year*365-719499
)*24+hour/*nowhavehours*/
)*60+min/*nowhaveminutes*/
)*60+sec;/*finallyseconds*/
}
更多相关文章
- sqlserver,mysql,oracle通用的模拟和改进的全文搜索算法
- SQL关键字转换大写核心算法实现
- Android开源 - Luban(鲁班)可能是最接近微信朋友圈的图片压缩算
- [置顶] android加密解密算法之3DES算法用例
- 算法 - 给出一个字符串str,输出包含两个字符串str的最短字符串,如
- java基础---一致性hash算法
- java-信息安全(三)-PBE加密算法
- 蓝桥杯 ALGO-53 算法训练 最小乘积(基本型)
- 算法笔记_138:稳定婚姻问题(Java)