using System.Runtime.InteropServices; //imports SetLocalTime function from kernel32.dll [DllImport("kernel32.dll", SetLastError=true)] public static extern int SetLocalTime (ref SystemTime lpSystemTime); //struct for date/time apis public struct SystemTime { public short wYear; public short wMonth; public short wDayOfWeek; public short wDay; public short wHour; public short wMinute; public short wSecond; public short wMilliseconds; } // And then set up a structure with the required properties and call the api from code: SystemTime systNew = new SystemTime(); // 设置属性 systNew.wDay = 1; systNew.wMonth = 1; systNew.wYear = 2004; systNew.wHour = 9; systNew.wMinute = 0; systNew.wSecond = 0; // 调用API,更新系统时间 SetLocalTime(ref systNew);
来自:http://www.pinvoke.net/default.aspx/kernel32/SetLocalTime.html //I have added some methods to structure SYSTEMTIME. After that the convertion between System.DateTime and SYSTEM became much easier. :) //Sample Code in C#: //Sample code for SetLocalTime and SYSTEMTIME structure //Author: Yuan Xiaohui from www.farproc.com //Time : August 30th, 2005 using System; using System.Runtime.InteropServices; public class MyClass1 { /// <summary> /// SYSTEMTIME structure with some useful methods /// </summary> 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 wMilliseconds; /// <summary> /// Convert form System.DateTime /// </summary> /// <param name="time"></param> public void FromDateTime(DateTime time) { wYear = (ushort)time.Year; wMonth = (ushort)time.Month; wDayOfWeek = (ushort)time.DayOfWeek; wDay = (ushort)time.Day; wHour = (ushort)time.Hour; wMinute = (ushort)time.Minute; wSecond = (ushort)time.Second; wMilliseconds = (ushort)time.Millisecond; } /// <summary> /// Convert to System.DateTime /// </summary> /// <returns></returns> public DateTime ToDateTime() { return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds); } /// <summary> /// STATIC: Convert to System.DateTime /// </summary> /// <param name="time"></param> /// <returns></returns> public static DateTime ToDateTime(SYSTEMTIME time) { return time.ToDateTime(); } } //SetLocalTime C# Signature [DllImport("Kernel32.dll")] public static extern bool SetLocalTime( ref SYSTEMTIME Time ); //Example private void Add7Days { //Get current time and adds 7 days to it DateTime t = DateTime.Now.AddDays(7);; //Convert to SYSTEMTIME SYSTEMTIME st = new SYSTEMTIME(); st.FromDateTime(t); //Call Win32 API to set time SetLocalTime(ref st); } }
[DllImport("kernel32.dll", SetLastError=true)]
public static extern int SetLocalTime (ref SystemTime lpSystemTime); //struct for date/time apis
public struct SystemTime
{
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
} // And then set up a structure with the required properties and call the api from code: SystemTime systNew = new SystemTime(); // 设置属性
systNew.wDay = 1;
systNew.wMonth = 1;
systNew.wYear = 2004;
systNew.wHour = 9;
systNew.wMinute = 0;
systNew.wSecond = 0; // 调用API,更新系统时间
SetLocalTime(ref systNew);
//Sample Code in C#: //Sample code for SetLocalTime and SYSTEMTIME structure
//Author: Yuan Xiaohui from www.farproc.com
//Time : August 30th, 2005 using System;
using System.Runtime.InteropServices; public class MyClass1
{
/// <summary>
/// SYSTEMTIME structure with some useful methods
/// </summary>
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 wMilliseconds; /// <summary>
/// Convert form System.DateTime
/// </summary>
/// <param name="time"></param>
public void FromDateTime(DateTime time)
{
wYear = (ushort)time.Year;
wMonth = (ushort)time.Month;
wDayOfWeek = (ushort)time.DayOfWeek;
wDay = (ushort)time.Day;
wHour = (ushort)time.Hour;
wMinute = (ushort)time.Minute;
wSecond = (ushort)time.Second;
wMilliseconds = (ushort)time.Millisecond;
} /// <summary>
/// Convert to System.DateTime
/// </summary>
/// <returns></returns>
public DateTime ToDateTime()
{
return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds);
}
/// <summary>
/// STATIC: Convert to System.DateTime
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
public static DateTime ToDateTime(SYSTEMTIME time)
{
return time.ToDateTime();
}
} //SetLocalTime C# Signature
[DllImport("Kernel32.dll")]
public static extern bool SetLocalTime( ref SYSTEMTIME Time ); //Example
private void Add7Days {
//Get current time and adds 7 days to it
DateTime t = DateTime.Now.AddDays(7);;
//Convert to SYSTEMTIME
SYSTEMTIME st = new SYSTEMTIME();
st.FromDateTime(t);
//Call Win32 API to set time
SetLocalTime(ref st);
}
}