システム時刻を変更するこのコードがあります。
このコードは機能しますが、なぜかローカル システムのタイム ゾーンを受け入れません。
それを行うには、さらにいくつかのメソッドを追加する必要があるようですまたは??
どうして?
どんな手掛かり?
public static class SystemFunctions
{
public struct SystemTime
{
public ushort Year;
public ushort Month;
public ushort DayOfWeek;
public ushort Day;
public ushort Hour;
public ushort Minute;
public ushort Second;
public ushort Millisecond;
};
[DllImport("kernel32.dll", EntryPoint = "GetSystemTime", SetLastError = true)]
public extern static void Win32GetSystemTime(ref SystemTime sysTime);
[DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public extern static bool Win32SetSystemTime(ref SystemTime sysTime);
public static bool SetSystemTime(DateTime dateTime)
{
SystemTime updatedTime = new SystemTime();
updatedTime.Year = (ushort)dateTime.Year;
updatedTime.Month = (ushort)dateTime.Month;
updatedTime.Day = (ushort)dateTime.Day;
// UTC time; it will be modified according to the regional settings of the target computer so the actual hour might differ
updatedTime.Hour = (ushort)dateTime.Hour;
updatedTime.Minute = (ushort)dateTime.Minute;
updatedTime.Second = (ushort)dateTime.Second;
// Call the unmanaged function that sets the new date and time instantly
return Win32SetSystemTime(ref updatedTime);
}
}
アップデート
したがって、最終的な解決策は、現地時間を変換してToUniversalTime
適用することでした。
ただし、正しいタイムゾーンも適用する必要があります。