Я написал приведенный ниже класс для изменения даты системы, но я не могу понять, почему она работает по-разному в разное время дня:
- Утро: точное время, переданное
SetTime()
устанавливается как системное время. - Дни: время, переданное
SetTime()
+ 1 час, устанавливается как системное время, откуда берется дополнительный час?
.
public class SystemDateTimeController
{
[DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
private extern static bool Win32SetSystemTime(ref SYSTEMTIME sysTime);
private struct SYSTEMTIME
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
public static void SetTime(DateTime NewDateTime)
{
try
{
SYSTEMTIME systime = new SYSTEMTIME();
systime.wMilliseconds = (ushort)NewDateTime.Millisecond;
systime.wSecond = (ushort)NewDateTime.Second;
systime.wMinute = (ushort)NewDateTime.Minute;
systime.wHour = (ushort)NewDateTime.Hour;
systime.wDayOfWeek = (ushort)NewDateTime.DayOfWeek;
systime.wDay = (ushort)NewDateTime.Day;
systime.wMonth = (ushort)NewDateTime.Month;
systime.wYear = (ushort)NewDateTime.Year;
Win32SetSystemTime(ref systime);
}
catch (Exception e)
{
Log("Failed to set system date time to: " + NewDateTime.ToString() + ". Exception: " + e.ToString());
}
}
}
Я знаю точное время, потраченное на SetTime()
и для тестирования фиктивных значений и для исключения любых возможностей сделать с источником я даже передал жестко закодированную строку: Convert.ToDateTime("07/06/2018 13:00:00");