正确更改Windows上的文件时间戳?

时间:2015-10-12 00:51:05

标签: windows api timestamp

我正在尝试通过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 ,并检查文件后的文件的时间戳文件属性,时间显示为 2015年3月2日,上午10:57:12

1 个答案:

答案 0 :(得分: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向用户显示数据/时间。