【发布时间】:2012-04-27 18:04:25
【问题描述】:
我有这个代码来改变系统时间。
此代码有效,但不知何故不接受本地系统时区。
看来我必须添加更多方法才能做到这一点??
怎么可能???
有什么线索吗?
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 并应用它。
但在我们还必须应用正确的时区之前。
【问题讨论】:
-
我认为您需要为此调用 SetTimeZoneInformation api。看看这个:pinvoke.net/default.aspx/kernel32/SetTimeZoneInformation.html
-
@Alex Mendez 你为什么不回答这个问题?
-
@Trisped - 在工作中被拉到开会。另外,不确定这是否是他想要的。