我正在尝试将文件的创建日期修改为发布日期。我首先将类似于“2005年4月2日”的字符串转换为std::tm
。然后我按照以下方式创建一个SYSTEMTIME
:
std::tm dt = from_string("2 April 2005");
SYSTEMTIME st { 0 };
st.wYear = dt.tm_year + 1900; // dt is years from 1900
st.wMonth = dt.tm_mon + 1; // dt is month index 0
st.wDay = dt.tm_mday;
st.wHour = 6; // FILETIME is based on UTC, which is 6 hours ahead
之后,我将
SYSTEMTIME
转换为 FILETIME
并使用它来应用更改。这将文件时间设置为2005年4月2日上午12:00:00
,是正确的。但是,4月2日之后的视频被设置为上午1:00:00
,确实,夏令时在2005年4月3日发生过。我该如何确定某个日期是否在夏令时之前或之后,以便可以相应调整
st.wHour
?目标是将所有时间设置为上午12:00:00
。最好能够处理自60年代以来到当前的日期。我尝试使用
TIME_ZONE_INFORMATION
和 GetTimeZoneInformation
但只返回了TIME_ZONE_ID_STANDARD
。
SYSTEMTIME
转换为FILETIME
?我正在阅读的文档说,SYSTEMTIME
可以表示协调世界时或本地时间,具体取决于所调用的函数。 - Howard HinnantSystemTimeToFileTime
假定SYSTEMTIME
已经是UTC时间。因此我不明白为什么st.wHour = 6
会映射到UTC午夜。 - Howard HinnantSetFileTime
并传递FILETIME{3921264640, 29701910}
,这在我的机器上会提前6个小时。 - anon