Windows FILETIME结构是否包含闰秒?

前端之家收集整理的这篇文章主要介绍了Windows FILETIME结构是否包含闰秒?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
FILETIME http://msdn.microsoft.com/en-us/library/ms724284(VS.85).aspx
结构从1601年1月1日开始(大概是当天的开始)
根据微软文档,但这是否包括闰秒?

注意:在互联网上使用一些时间回答陌生人的问题很慷慨如果你真的不知道答案,那就不是特别有用了。另外,23秒不是一个完全不合理的时间,令人担忧。许多Windows机器的时钟精确到23秒钟内。

问题不应该是FILETIME包括闰秒。

它应该是:

Do the people,functions,and libraries,who interpret a FILETIME (i.e. FileTimeToSystemTime) include leap seconds when counting the duration?

简单的答案是“不”。 FileTimeToSystemTime返回秒为0..59。

更简单的答案是:“当然不,怎么可能?”

我的Windows 2000机器不知道自从发布以来的十年里增加了2个闰秒。对FILETIME的任何解释都是错误的。

最后,我们可以通过直接的实验观察来确定海报的答案,而不是依靠逻辑,

var
    systemTime: TSystemTime;
    fileTime: TFileTime;
begin
    //Construct a system-time for the 12/31/2008 11:59:59 pm
    ZeroMemory(@systemTime,SizeOf(systemTime));
    systemtime.wYear := 2008;
    systemTime.wMonth := 12;
    systemTime.wDay := 31;
    systemTime.wHour := 23;
    systemtime.wMinute := 59;
    systemtime.wSecond := 59;

    //Convert it to a file time
    SystemTimeToFileTime(systemTime,{var}fileTime);

    //There was a leap second 12/31/2008 11:59:60 pm
    //Add one second to our filetime to reach the leap second
    filetime.dwLowDateTime := fileTime.dwLowDateTime+10000000; //10,000,000 * 100ns = 1s

    //Convert the filetime,sitting on a leap second,to a displayable system time
    FileTimeToSystemTime(fileTime,{var}systemTime);

    //And now print the system time
    ShowMessage(DateTimeToStr(SystemTimeToDateTime(systemTime)));

加一秒钟

12/31/2008 11:59:59pm

1/1/2009 12:00:00am

而不是

1/1/2009 11:59:60pm

证明完毕

原来的海报可能不喜欢,但是上帝故意装备它,以便一年不能被一天分割。他只是为了搞砸程序员。

猜你在找的Windows相关文章