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