// 针对于旧Windows系统,如Windows XP,win2003,win2008
[DllImport("Kernel32.dll")]
public static extern bool SetSystemTime(ref SystemTime sysTime);
[DllImport("Kernel32.dll")]
public static extern void GetSystemTime(ref SystemTime sysTime);
[DllImport("Kernel32.dll")]
public static extern bool SetLocalTime(ref SystemTime sysTime);
[DllImport("Kernel32.dll")]
public static extern void GetLocalTime(ref SystemTime sysTime);
[StructLayout(LayoutKind.Sequential)]
public struct SystemTime
{
[MarshalAs(UnmanagedType.U2)]
internal ushort year; // 年
[MarshalAs(UnmanagedType.U2)]
internal ushort month; // 月
[MarshalAs(UnmanagedType.U2)]
internal ushort dayOfWeek; // 星期
[MarshalAs(UnmanagedType.U2)]
internal ushort day; // 日
[MarshalAs(UnmanagedType.U2)]
internal ushort hour; // 时
[MarshalAs(UnmanagedType.U2)]
internal ushort minute; // 分
[MarshalAs(UnmanagedType.U2)]
internal ushort second; // 秒
[MarshalAs(UnmanagedType.U2)]
internal ushort milliseconds; // 毫秒
}
/// <summary>
/// 设置系统时间
/// </summary>
private void setSystemDate(DateTime currentTime)
{
SystemTime sysTime = new SystemTime();
sysTime.year = Convert.ToUInt16(currentTime.Year);
sysTime.month = Convert.ToUInt16(currentTime.Month);
sysTime.day = Convert.ToUInt16(currentTime.Day);
sysTime.dayOfWeek = Convert.ToUInt16(currentTime.DayOfWeek);
sysTime.minute = Convert.ToUInt16(currentTime.Minute);
sysTime.second = Convert.ToUInt16(currentTime.Second);
sysTime.milliseconds = Convert.ToUInt16(currentTime.Millisecond);
//SetSystemTime()默认设置的为UTC时间,设定时比北京时间多了8个小时。
//int nBeijingHour = currentTime.Hour - 8
int nBeijingHour = currentTime.Hour;
if (nBeijingHour < 0)
{
nBeijingHour = 24;
sysTime.day = Convert.ToUInt16(currentTime.Day - 1);
sysTime.dayOfWeek = Convert.ToUInt16(currentTime.DayOfWeek - 1);
}
else
{
sysTime.day = Convert.ToUInt16(currentTime.Day);
sysTime.dayOfWeek = Convert.ToUInt16(currentTime.DayOfWeek);
}
sysTime.hour = Convert.ToUInt16(nBeijingHour);
//设置系统时间
//SetSystemTime(ref sysTime);
SetLocalTime(ref sysTime);
}
方法调用:
DateTime currentTime= Convert.ToDateTime("2019-04-15 18:00:25");
setSystemDate(currentTime);
06-14
1563
06-05
4620
04-25
429
02-18
739