C# 同步工作站与SQL服务器的时间,设置本机时间

时间:2021-10-30 18:21:04

本文转载: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); // 同步服务器的时间 
}