我正在尝试将文件的创建日期修改为发布日期。我首先将诸如“ 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
,并使用它来应用更改。
这将文件时间设置为2 April 2005 12:00:00 AM
,这是正确的。但是,将4月2日之后的视频设置为1:00:00 AM
,并且可以肯定的是,夏令时发生在2005年4月3日。
如何确定某个日期是否在夏令时之前或之后,以便可以相应地调整st.wHour
?目标是将所有时间都设置为12:00:00 AM
。最好在日期可以追溯到60年代的日期以及当前日期使用。
我尝试使用TIME_ZONE_INFORMATION
和GetTimeZoneInformation
,但我只得到TIME_ZONE_ID_STANDARD
。