116444736000000000的由来

作者: YongHao | 来源:发表于2016-03-21 22:18 被阅读615次
测试:)

你是不是经常在有关时间的函数代码片段里看到过116444736000000000这个magic number?

下面由我的代码说明这个神奇的magic number

/* Converting from FILETIME to UNIX Timestamp */ 
unix_time = FILE_TTIME; 
unix_time -= 10000000 * 60 * 60 * 24 * 365 * (1970-1601) + 89; unix_time /= 10000000;

windows有很多关于时间的函数都是使用FILETIME结构,这个结构代表了从1601年1月1日开始到现在的100毫微秒间隔是多少。
而其他平台则更多使用unix时间轴,从1970年1月1日00:00:00到现在的经过的秒数。
当需要转换两个时间戳时,你需要的就是: 116444736000000000
怎么算的?

1s = 1 000 000 000 ns = 10 000 000 * 100 ns //1s内就有10 000 000个100毫微秒间隔。
[10000000s *60 * 60 ] h * 24 * 【365 [days] * (1970-1601)[gap] + 89[leap days 闰年的时间]】 = 116444736000000000ns

在开源项目Wine里,有更好的写法:

#define SECSPERDAY 86400/* 1601 to 1970 is 369 years plus 89 leap days */
#define SECS_1601_TO_1970 ((369 * 365 + 89) * (ULONGLONG)SECSPERDAY)
#define TICKSPERSEC 10000000 //1s内的100毫微秒间隔
#define TICKS_1601_TO_1970 (SECS_1601_TO_1970 * TICKSPERSEC) unix_time = FILE_TTIME; 
unix_time -= TICKS_1601_TO_1970; 
unix_time /= TICKSPERSEC;

相关文章

  • 116444736000000000的由来

    你是不是经常在有关时间的函数代码片段里看到过116444736000000000这个magic number? 下...

  • 年的由来,春节的由来

    在中国的远古年代,年,就是一个传说中的魔鬼,在每一个四季轮回的最后一天,也就是在除夕夜,来到人间,为非作歹,于是,...

  • #!的由来

    使用Linux或者Unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?本文了将给你简单介绍一下Sh...

  • 由来

    朦胧晦暗的黎明中只有远处山间的粉红, 矫揉造作的雨拂着衣玦滴在眼眸。 不知心中欢喜还是忧伤, 只是前夜的消息未能明...

  • 由来

    我最近开始不断审视自己,也许因为不满意,也许就是闲的。每天我们过着差不多的日子,和差不多的人说差不多的事,我可不想...

  • 由来

    月亮森林,有眼泪种下的相思草,每次满月的时候,相思草疯长,于风中摇曳,笛声声声慢,他与她相会,煮一壶热茶,品一往深...

  • 由来

    菠萝由来 菠萝其实也不叫菠萝,菠萝是月亮对菠萝的称呼,是属于月亮是独一无二的专属称号。菠萝吃饭咬到自己,月亮就这样...

  • 由来

    “见了他,她变得很低很低,低到尘埃里,从尘埃里开出花来” 这句话来自张爱玲送胡兰成的照片的背后的字迹。 喜欢一个人...

  • 《由来》

    昏黄的迂回, 安静,回味, 曾经不更的青涩, 在指缝间被揉碎。 少了破茧的撕心裂肺, 像是浓郁的咖啡, 入得口去,...

  • 《由来》

    先了解一下中国地理,长点见识,能装装B。更主要的是,我体会到了:真正的学习才刚刚开始,学校里学的东西,都不自己的,...

网友评论

    本文标题:116444736000000000的由来

    本文链接:https://www.haomeiwen.com/subject/fabhlttx.html