using System.Runtime.InteropServices; //System.Runtime.InteropServices一般用到其中的DllImport,它用来调用windows中一些DLL的函数(Windows API),或调用自己用c++写的DLL中的函数.
#region ComputerTime
[StructLayout(LayoutKind.Sequential)]
public struct SystemTime
{
public ushort wYear;//ushort 为无符号16位整数
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMiliseconds;
}
public class Win32
{
[DllImport("Kernel32.dll ")]//参看:http://hi.baidu.com/ja86/blog/item/011c6522455f88fad7cae2ce.html
public static extern bool SetSystemTime(ref SystemTime SysTime);//SetSystemTime设置格林威治时间,比北京时间晚8小时,需要调整wHour。
[DllImport("Kernel32.dll ")]
public static extern void GetSystemTime(ref SystemTime SysTime);
}
#endregion
#region 时间同步
/// <summary>
/// 设置与服务器同步时间
/// </summary>
public void SynchronousTime(string strdt)
{
try
{
#region 更改计算机时间
SystemTime sysTime = new SystemTime();
DateTime ServerTime = Convert.ToDateTime(strdt);
sysTime.wYear = Convert.ToUInt16(ServerTime.Year);
sysTime.wMonth = Convert.ToUInt16(ServerTime.Month);
//处置北京时间
int nBeijingHour = ServerTime.Hour - 8;
if (nBeijingHour <= 0)
{
nBeijingHour += 24;
sysTime.wDay = Convert.ToUInt16(ServerTime.Day - 1);
sysTime.wDayOfWeek = Convert.ToUInt16(ServerTime.DayOfWeek - 1);
}
else
{
sysTime.wDay = Convert.ToUInt16(ServerTime.Day);
sysTime.wDayOfWeek = Convert.ToUInt16(ServerTime.DayOfWeek);
}
sysTime.wHour = Convert.ToUInt16(nBeijingHour);
sysTime.wMinute = Convert.ToUInt16(ServerTime.Minute);
sysTime.wSecond = Convert.ToUInt16(ServerTime.Second);
sysTime.wMiliseconds = Convert.ToUInt16(ServerTime.Millisecond);
Win32.SetSystemTime(ref sysTime);
#endregion
}
catch
{
//产生错误则不引发异常。
}
}
#endregion

被折叠的 条评论
为什么被折叠?



