+ -
当前位置:首页 → 问答吧 → 内核计算时间的函数 mktime

内核计算时间的函数 mktime

时间:2010-08-19

来源:互联网

下面这个内核函数用于计算从格林威治时间到 year0-mon0-day hour:min:sec 的秒数。
蹊跷在于用于计算天数的公式是如何来的?太trick了吧。
  1. unsigned long
  2. mktime(const unsigned int year0, const unsigned int mon0,
  3.        const unsigned int day, const unsigned int hour,
  4.        const unsigned int min, const unsigned int sec)
  5. {
  6.         unsigned int mon = mon0, year = year0;

  7.         /* 1..12 -> 11,12,1..10 */
  8.         if (0 >= (int) (mon -= 2)) {
  9.                 mon += 12;        /* Puts Feb last since it has leap day */
  10.                 year -= 1;
  11.         }

  12.         return ((((unsigned long)
  13.                   (year/4 - year/100 + year/400 + 367*mon/12 + day) +
  14.                   year*365 - 719499
  15.             )*24 + hour /* now have hours */
  16.           )*60 + min /* now have minutes */
  17.         )*60 + sec; /* finally seconds */
  18. }
复制代码

作者: linyunxian   发布时间: 2010-08-19

直接用应用程序测试一下吧,中间是有一些转换的逻辑。

作者: Godbach   发布时间: 2010-08-19

((year/4 - year/100 + year/400 + 367*mon/12 + day) +   year*365 - 19499 )  这个用于计算天数的公式是怎么来的?或者说有哪篇论文有它的介绍

作者: linyunxian   发布时间: 2010-08-19