C# 同步工作站与SQL服务器的时间

时间:2024-05-19 00:05:38
/// <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);//设置本机时间
}
}
/// <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);//同步服务器的时间
}