DOS Date和Time转化为系统时间
在一些文件类型中,会涉及到一些文件的创建、修改等时间, 这些信息被写在了文件头里面,例如Zip等格式的文档: 如果直接读原始字节流,肯定是一个无符号整数(通常是16位),这中间就涉及到了一个关于时间的转化问题。如果弄清楚了定义,事情就好办很多,不过微软家的好处就是文档丰富: https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-dosdatetimetofiletime 这个应该能够充分说明问题了,接下来的工作就是自己写代码把各个值撸出来。 不过,多花几分钟就可以知道,其实这也是一个重复造轮子的工作,微软提供了好几个函数,就是完成这一工作的:DosDateTimeToFileTime、FileTimeToSystemTime 测试代码如下: DosDateTimeToFileTime(lfh.LMFileDate,lfh.LMFileTime,&ft); FileTimeToSystemTime(&ft, &stUTC); //SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal); printf("Last Modified Time:%02d-%02d-%02d ",stUTC.wYear,stUTC.wMonth,stUTC.wDay)