我从c#应用程序调用了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()
,然后将时间直接设置为我提供的时间,而不考虑时区。
这是预期的行为吗?如何在设置时区的两种方法之间保持一致?
答案 0 :(得分:1)
我相信我发现了这个问题。
事实证明,编写代码的人int
忽略了设置SetDynamicTimeZoneInformation()
属性。
因此,设置的时区信息的UTC偏移量为零,因此不会进行任何调整。