mktime 的选择
来源:互联网 发布:html源码yuansms 编辑:程序博客网 时间:2024/05/17 19:23
看了kernel_mktime的实现,linux/kernel/mktime.c
看了mktime的实现,include/linux/time.h
还是觉得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; /* Puts Feb last since it has leap day */ year -= 1; } return ((( (unsigned long) (year/4 - year/100 + year/400 + 367*mon/12 + day) + year*365 - 719499 )*24 + hour /* now have hours */ )*60 + min /* now have minutes */ )*60 + sec; /* finally seconds */}
对于上面这段代码算法的解释,我也查阅了几篇博文,供大家研究。
Linux源码中的mktime算法解析
Linux内核中mktime()函数算法分析
个人认为《Linux内核中mktime()函数算法分析》这边文章,分析的比较好。如为何从3月开始?以及这样带来的闰年计算的便利等等。另外主时间基准点问题说的也很明白。
下面也给出kernel_mktime的一个连接,请参考
kernel_mktime的实现,linux/kernel/mktime.c
其实关于mktime的实现,还有其他实现,只要你在编译开发环境里挖掘,肯定能找到对应实现,如php也有mktime的实现等等。
实际上我们要首先清楚一点:mktime是根据参数年月日时分秒,算出此参数时间到1970.01.01.00:00:00 所经历的总秒数。
时分秒的计算比较固定,(时*60+分)*60
日的计算,(日参数-1)*24*60*60
月的计算,g(月),根据参数月算出一年之中到这个参数月经历的天数
年的计算 f(年),根据参数年算出参数年到1970经过的天数
最后结果 (f(年)+g(月) )*24*60*60 + (日参数-1)*24*60*60 + (时*60+分)*60+秒
码海拾贝 date&time 关于time的接口到此为止,我估计在任何环境下研发使用都可以应急使用了。后面如果还增加相关文章,可能就是历法方面的。
Linus said:“I also hate Gregorius, pope or no. I'm grumpy.”
- mktime 的选择
- mktime 的选择
- 关于mktime的问题
- mktime时间的转换
- mktime的使用
- mktime()的格式
- mktime
- mktime
- 早期版本的mktime.c
- mktime返回-1的原因
- php中mktime的相关理解
- linux0.11版内核的mktime分析
- php中time()和mktime()方法的区别
- PHP mktime获取时间戳的一个黑色幽默
- Linux下的时间--struct tm, mktime, localtime, strftime
- 使用mktime 函数取得一个日期的时间戳
- mktime.c
- mktime ()函数
- poj1321
- Android ApiDemos示例解析(92):Text->Linkify
- 深入理解HTTP消息头
- Android ApiDemos示例解析(93):Text->LogTextBox
- 越是不了解的东西越是觉得好奇
- mktime 的选择
- 他们赤着脚在那泥泞中顶着烈日挥汗如雨
- HDU 1465(错排公式)
- 文凭 心态
- VC历程1
- 是淳朴善良的大道人依靠独特的地理优势发展自己真实总结
- JS DOM (Chapter10)
- VS2005+Jquery 调用Web service返回数据集实现无刷新数据动态更新
- 给IT新人的15点建议:苦逼程序员的辛酸反省与总结