本文轉載:http://www.csframework.com/archive/2/arc-2-20130101-1971.htm
C# Code:
/// <summary>
/// 設定本機時間
/// </summary>
public class LocalTimeSync
{
[DllImport("Kernel32.dll")]
public static extern bool SetSystemTime(ref SystemTime sysTime);
[DllImport("Kernel32.dll")]
public static extern void GetSystemTime(ref SystemTime sysTime);
[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;
}
/// <summary>
/// 設定本機時間
/// </summary>
public static void SyncTime(DateTime currentTime)
{
SystemTime sysTime = new SystemTime();
sysTime.wYear = Convert.ToUInt16(currentTime.Year);
sysTime.wMonth = Convert.ToUInt16(currentTime.Month);
sysTime.wDay = Convert.ToUInt16(currentTime.Day);
sysTime.wDayOfWeek = Convert.ToUInt16(currentTime.DayOfWeek);
sysTime.wMinute = Convert.ToUInt16(currentTime.Minute);
sysTime.wSecond = Convert.ToUInt16(currentTime.Second);
sysTime.wMiliseconds = Convert.ToUInt16(currentTime.Millisecond);
//處理北京時間
int nBeijingHour = currentTime.Hour - 8;
if (nBeijingHour <= 0)
{
nBeijingHour = 24;
sysTime.wDay = Convert.ToUInt16(currentTime.Day - 1);
//sysTime.wDayOfWeek = Convert.ToUInt16(current.DayOfWeek - 1);
}
else
{
sysTime.wDay = Convert.ToUInt16(currentTime.Day);
sysTime.wDayOfWeek = Convert.ToUInt16(currentTime.DayOfWeek);
}
sysTime.wHour = Convert.ToUInt16(nBeijingHour);
SetSystemTime(ref sysTime);//設定本機時間
}
}
//來源:C/S架構網(www.csframework.com) QQ:1980854898
C# Code:
/// <summary>
/// 同步伺服器時間
/// </summary>
public void SyncServerTime()
{
string sql = "SELECT GETDATE()";
object o = DataProvider.Instance.ExecuteScalar(Globals.DEF_ATTEND_SYSTEM_DB, sql);
DateTime dt = ConvertEx.ToDateTimeEx(o);
//LocalTimeSync.SyncTime(dt);
//比較時間一致性
if (ConvertEx.ToCharYYYYMMDDHHMM(DateTime.Now) != ConvertEx.ToCharYYYYMMDDHHMM(dt))
LocalTimeSync.SyncTime(dt);//同步伺服器的時間
}