基本知识
FILETIME structure (minwinbase.h)
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
包含一个64比特的值,在结构体里面分别以高32位和低32位组成,表示的是距离1601年1月1日过去了多少个0.1毫秒。要想转换为用户可读的时间,必须使用FileTimeToSystemTime函数。
BOOL FileTimeToSystemTime(
[in] const FILETIME *lpFileTime,
[out] LPSYSTEMTIME lpSystemTime
);
第一个参数是指向FILETIME结构体的指针,第二个参数是指向SYSTEMTIME结构体的指针。之后,通过访问SYSTEMTIME结构体便可以获得详细的年月日。
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
问题出现
一通操作猛如虎,程序运行下去却发生了时间错误。一开始的文件是这样子的:
运行后却发现比既定日期少了一天。
通过Google搜索,查阅到一篇帖子:不使用FileTimeToLocalTime会导致8小时时差,终于解决了我的疑惑。仔细看的话,出问题的两个文件都是在凌晨,减去8小时,正好是上一天。
问题解决
果断更换相关代码。
通过时区转换后,终于能识别正确的时间了。