正确更改 Windows 上的文件时间戳?
Posted
技术标签:
【中文标题】正确更改 Windows 上的文件时间戳?【英文标题】:Changing file timestamps on windows correctly? 【发布时间】:2016-01-09 09:04:06 【问题描述】:我正在尝试通过 Windows API 更改文件的文件创建时间,但我输入到函数中的日期最终会关闭一天左右,时间(小时和分钟)会关闭几个小时。
如何计算时区和夏令时等?或者更确切地说,如何在没有窗口调整时间的情况下设置我指定的确切日期时间
用到的代码如下:
SYSTEMTIME sysTime;
GetSystemTime(&sysTime);
sysTime.wDay = d;
sysTime.wMonth = m;
sysTime.wYear = y;
sysTime.wHour = h;
sysTime.wMinute = min;
sysTime.wSecond = s;
sysTime.wMilliseconds = ms;
FILETIME fTime;
SystemTimeToFileTime(&sysTime,&fTime);
SetFileTime(fHandle, &fTime, NULL, NULL); // Create Time
比如我通过程序指定一个文件的时间为1/3/2015 21:57,在via之后查看文件的时间戳文件属性,时间显示为 March 02, 2015, 10:57:12 AM
【问题讨论】:
【参考方案1】:您的代码基本上是正确的。该应用程序通常使用 UTC 时间 (GetSystemTime
),它只需要在向用户显示时间时进行本地时间转换。
如果您确实需要输入本地时间,请使用TzSpecificLocalTimeToSystemTime
将本地时间转换为UTC时间。
SYSTEMTIME local_time, system_time;
GetLocalTime(&local_time);
local_time.wHour = 2;//user input
...
TzSpecificLocalTimeToSystemTime(NULL, &local_time, &system_time);
FILETIME file_time;
SystemTimeToFileTime(&system_time, &file_time);
SetFileTime(h, &file_time, NULL, NULL);
否则只需使用SystemTimeToTzSpecificLocalTime
向用户显示数据/时间。
【讨论】:
以上是关于正确更改 Windows 上的文件时间戳?的主要内容,如果未能解决你的问题,请参考以下文章