我根据Stackoverflow帖子“以编程方式更改系统日期”实现了在单元测试中更改系统日期时间的代码。如何将系统日期时间重设为当前日期时间?
public struct SYSTEMTIME
{
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
}
[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool SetSystemTime( [In] ref SYSTEMTIME st );
SYSTEMTIME st = new SYSTEMTIME();
st.wYear = 2003; // must be short
st.wMonth = 5;
st.wDay = 22;
st.wHour = 0;
st.wMinute = 0;
st.wSecond = 0;
SetSystemTime(ref st); // invoke this method.
如果PC联机,则正确的方法是转到query the current DateTime from timeserver。错误和容易出错的方法是在设置自定义DateTime之前,立即在系统时钟和自定义DateTime之间存储TimeSpan difference,然后在以后使用该TimeSpan来获取近似的实际DateTime进行重置。这是错误的方法,因为从计算值引入的延迟会减慢您的时钟速度(如果无法察觉的话),并且容易出错,因为如果您的应用程序或其他应用程序更改了两者之间的系统时钟,则会得到更加不准确的结果。