我正在尝试通过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
答案 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
向用户显示数据/时间。