C# 同步工作站与SQL服务器的时间
扫描二维码
随时随地手机看文章
////// 设置本机时间 ///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; } ////// 设置本机时间 ///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);//设置本机时间 } }
////// 同步服务器时间 ///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);//同步服务器的时间 }