一日之隔——Windows系统FileTimeToSystemTime心得

基本知识

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小时,正好是上一天。

问题解决

        果断更换相关代码。

        通过时区转换后,终于能识别正确的时间了。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值