У меня есть вызов SetSystemTime из моего приложения С#. Однако, если у меня установлен часовой пояс Windows с ненулевым смещением от UTC, иногда кажется, что системные часы настраиваются так, как если бы предоставленное мной время было UTC (т.е. преобразовывалось в местное время), а в других случаях это не так, это просто устанавливает время непосредственно в параметр date
.
[StructLayout(LayoutKind.Sequential)]
internal struct SystemTime
{
public short Year;
public short Month;
public short DayOfWeek;
public short Day;
public short Hour;
public short Minute;
public short Second;
public short Milliseconds;
}
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool SetSystemTime(ref SystemTime st);
public static bool AdjustSystemClock(DateTime date)
{
SystemTime systemTime = new SystemTime();
systemTime.Year = (short)date.Year;
systemTime.Month = (short)date.Month;
systemTime.Day = (short)date.Day;
systemTime.Hour = (short)date.Hour;
systemTime.Minute = (short)date.Minute;
systemTime.Second = (short)date.Second;
return SetSystemTime(ref systemTime);
}
Разница, кажется, заключается в следующем: когда я устанавливаю часовой пояс с помощью Windows, затем запускаю приложение, когда я вызываю SetSystemTime()
, оно настраивает предоставленное время, как если бы это было UTC.
Но когда я устанавливаю часовой пояс с помощью функции SetDynamicTimeZoneInformation()
, перезапускаю приложение, а затем вызываю SetSystemTime()
, тогда оно устанавливает время непосредственно на время, которое я предоставляю, независимо от часового пояса.
Это ожидаемое поведение? Как я могу добиться согласованности между двумя методами установки часового пояса?