C# 为什么SetSystemTime()在下午的行为会有所不同?
我写了下面的类来更改系统日期时间,但我不明白为什么它在一天中的不同时间运行不同:C# 为什么SetSystemTime()在下午的行为会有所不同?,c#,winapi,windows-10,C#,Winapi,Windows 10,我写了下面的类来更改系统日期时间,但我不明白为什么它在一天中的不同时间运行不同: 早晨:传递到SetTime()的确切时间设置为系统时间 下午:传递到SetTime()+1Hr的时间被设置为系统时间,额外的一小时从何而来 我知道传递到SetTime()的确切时间,为了测试Purposes和消除与源代码相关的任何可能性,我甚至传递了一个硬编码字符串:Convert.ToDateTime(“07/06/2018 13:00:00”)设置系统时间预期UTC。OP在当地时间为它提供信息,这就是问题
- 早晨:传递到
的确切时间设置为系统时间SetTime()
- 下午:传递到
+1Hr的时间被设置为系统时间,额外的一小时从何而来SetTime()
我知道传递到
SetTime()
的确切时间,为了测试Purposes和消除与源代码相关的任何可能性,我甚至传递了一个硬编码字符串:Convert.ToDateTime(“07/06/2018 13:00:00”)代码>设置系统时间预期UTC。OP在当地时间为它提供信息,这就是问题所在(多亏了)
为了您的目的,请更好地使用
始终使用您的本地时区
问候语设置系统时间
不会干扰时区。它期望UTC。OP正在输入本地时间,正如他们硬编码的字符串所示。@IInspectable这使它现在有意义了,谢谢。SetLocalTime
也有同样的问题。你通过UTC,所有的赌注都输掉了。如果您的方法采用了,请评估其属性,并调用适当的API,或手动应用所需的调整。我们不知道您的代码是做什么的。您显示的代码按预期工作。您的输入可能是本地时间,但SetSystemTime
需要UTC。我们看不到被破坏的代码。Show a.@IInspectable我试图设置的是本地日期时间,我假设该方法采用日期时间,并将其设置为系统时间,而不考虑是基于UTC还是基于本地时间。显然我错了。
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());
}
}
}