【发布时间】:2018-06-07 08:36:36
【问题描述】:
我编写了以下类来更改系统日期时间,但我不明白为什么它在一天中的不同时间会有所不同:
- 早上:传递给
SetTime()的确切时间被设置为系统时间。 - 下午:传递给
SetTime()+1Hr 的时间被设置为系统时间,额外的一小时从何而来?
.
public class SystemDateTimeController
{
[DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
private extern static bool Win32SetSystemTime(ref SYSTEMTIME sysTime);
private struct SYSTEMTIME
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
public static void SetTime(DateTime NewDateTime)
{
try
{
SYSTEMTIME systime = new SYSTEMTIME();
systime.wMilliseconds = (ushort)NewDateTime.Millisecond;
systime.wSecond = (ushort)NewDateTime.Second;
systime.wMinute = (ushort)NewDateTime.Minute;
systime.wHour = (ushort)NewDateTime.Hour;
systime.wDayOfWeek = (ushort)NewDateTime.DayOfWeek;
systime.wDay = (ushort)NewDateTime.Day;
systime.wMonth = (ushort)NewDateTime.Month;
systime.wYear = (ushort)NewDateTime.Year;
Win32SetSystemTime(ref systime);
}
catch (Exception e)
{
Log("Failed to set system date time to: " + NewDateTime.ToString() + ". Exception: " + e.ToString());
}
}
}
我知道传递给SetTime() 的确切时间,以及用于测试目的并消除与源有关的任何可能性,我什至传递了一个硬编码字符串:Convert.ToDateTime("07/06/2018 13:00:00");
【问题讨论】:
-
我们不知道你的代码做了什么。您显示的代码按预期工作。据推测,您的输入是当地时间,但
SetSystemTime需要 UTC。我们看不到被破坏的代码。显示minimal reproducible example。 -
@IInspectable 我试图设置的是本地 DateTime,我假设该方法采用 DateTime 原样并将其设置为系统时间,而不关心它是基于 UTC 还是基于本地时间。显然我错了。
标签: c# winapi windows-10