[StructLayout(LayoutKind.Sequential)]
public 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 wMiliseconds;
}
public class Win32
{
[DllImport("CoreDll.DLL")]
public static extern bool SetSystemTime(ref SystemTime time);
[DllImport("CoreDll.DLL")]
public static extern bool SetLocalTime(ref SystemTime time);
[DllImport("CoreDll.DLL")]
public static extern void GetSystemTime(ref SystemTime time);
[DllImport("CoreDll.DLL")]
public static extern void GetLocalTime(ref SystemTime time);
}
public static bool SetLocalTimeByStr(string timestr)
{
bool flag = false;
SystemTime sysTime = new SystemTime();
string SysTime = timestr.Trim();
sysTime.wYear = Convert.ToUInt16(SysTime.Substring(0, 4));
sysTime.wMonth = Convert.ToUInt16(SysTime.Substring(4, 2));
sysTime.wDay = Convert.ToUInt16(SysTime.Substring(6, 2));
sysTime.wHour = Convert.ToUInt16(SysTime.Substring(8, 2));
sysTime.wMinute = Convert.ToUInt16(SysTime.Substring(10, 2));
sysTime.wSecond = Convert.ToUInt16(SysTime.Substring(12, 2));
try
{
flag = Win32.SetLocalTime(ref sysTime);
}
catch (Exception ex1)
{
Console.WriteLine("SetLocalTime函数执行异常" + ex1.Message);
}
return flag;
}
private void pictureBox6_Click(object sender, EventArgs e)
{
string str = textBox1.Text + textBox2.Text + textBox3.Text + textBox4.Text + textBox5.Text + "00";
SetLocalTimeByStr(str);
}
写这段代码时网上其实有很多,都差不多,但调试的时候由于忽略了一个过程纠结了好长一段时间,调试时,时间是有范围限制的,并不是随意输入,我调试时就因为开始一直输入1111年而时间一直没有变化,一直还以为是代码的问题,呼呼……