C# 응용 프로그램에서 SetSystemTime에 대한 호출이 있습니다. 그러나 Windows 표준 시간대가 UTC에서 0이 아닌 오프셋으로 설정되어있는 경우, 때때로 제공된 시간이 UTC (즉, 현지 시간으로 변환)이고 다른 시간은 그렇지 않은 것처럼 시스템 시계를 조정하는 것처럼 보입니다 시간을 직접 date
매개 변수로 설정합니다.SetSystemTime - UTC 또는 현지 시간?
[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를 사용하는 시간대를 설정하면 나는 그것이 UTC 인 경우로 제공 시간을 조정 SetSystemTime()
호출 할 때, 다음, 응용 프로그램을 시작합니다.
그러나 SetDynamicTimeZoneInformation()
함수를 사용하여 시간대를 설정 한 다음 응용 프로그램을 다시 시작한 다음 SetSystemTime()
을 호출하면 표준 시간대와 상관없이 내가 제공 한 시간으로 직접 시간이 설정됩니다.
이것은 예상되는 동작입니까? 시간대를 설정하는 두 가지 방법간에 일관성을 유지하려면 어떻게해야합니까?
SetSystemTime()은 "내가 제공 한 시간에 직접 시간을 설정하지 않습니다." UTC 시간을 설정합니다. 아일랜드에 거주하는 경우를 제외하고는 UTC + 0 시간대에 위치합니다. 정확하게 축복이 아닙니다. 컴퓨터가 비행기 안에 있지 않으면 무작위로 SetDynamicTimeZoneInformation()을 호출하는 것이 바람직하지 않습니다. .NET 프로그램에서 시간대 변경을 인식하게하려면 다시 시작하거나 CultureInfo.ClearCachedData + TimeZoneInfo.ClearCachedData를 호출해야합니다. 이러지 마. –
Windows 컴퓨터는 자동으로 시간을 동기화합니다. 내장 기능을 사용하는 것이 더 안전하지 않습니까? 동기화 빈도를 변경하거나 [설정 및 Win32tm 도구를 통해 강제로 동기화] (https://technet.microsoft.com/ko-kr/windows-server-docs/identity/ad-ds/get-started/windows) -time-service/windows-time-service-tools-and-settings) –