核心代码:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace TestServerTime { public class ServerInfo { public static string GetHostName() { return Dns.GetHostName(); } public static string GetLocalIP() { string ip = ""; try { string HostName = Dns.GetHostName(); //得到主机名 IPHostEntry IpEntry = Dns.GetHostEntry(HostName); for (int i = 0; i < IpEntry.AddressList.Length; i++) { //从IP地址列表中筛选出IPv4类型的IP地址 //AddressFamily.InterNetwork表示此IP为IPv4, //AddressFamily.InterNetworkV6表示此地址为IPv6类型 if (IpEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork) { ip = IpEntry.AddressList[i].ToString(); } } } catch (Exception ex) { throw ex; } return ip; } [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern bool SetLocalTime(ref SYSTEMTIME lpSystemTime); [StructLayout(LayoutKind.Sequential)] internal struct SYSTEMTIME { public ushort wYear; public ushort wMonth; public ushort wDayOfWeek; // ignored for the SetLocalTime function public ushort wDay; public ushort wHour; public ushort wMinute; public ushort wSecond; public ushort wMilliseconds; } public static bool SetLocalTimeByStr(string timestr) { bool flag = false; SYSTEMTIME sysTime = new SYSTEMTIME(); string SysTime = timestr.Trim(); //此步骤多余,为方便程序而用直接用timestr即可 sysTime.wYear = Convert.ToUInt16(SysTime.Substring(0, 4)); sysTime.wMonth = Convert.ToUInt16(SysTime.Substring(4, 2)); sysTime.wDay = Convert.ToUInt16(SysTime.Substring(6, 2)); sysTime.wHour = Convert.ToUInt16(SysTime.Substring(8, 2)); sysTime.wMinute = Convert.ToUInt16(SysTime.Substring(10, 2)); sysTime.wSecond = Convert.ToUInt16(SysTime.Substring(12, 2)); //注意: //结构体的wDayOfWeek属性一般不用赋值,函数会自动计算,写了如果不对应反而会出错 //wMiliseconds属性默认值为一,可以赋值 try { flag = SetLocalTime(ref sysTime); } //由于不是C#本身的函数,很多异常无法捕获 //函数执行成功则返回true,函数执行失败返回false //经常不返回异常,不提示错误,但是函数返回false,给查找错误带来了一定的困难 catch (Exception ex1) { Console.WriteLine("SetLocalTime函数执行异常" + ex1.Message); } return flag; } } }
调用代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestServerTime { class Program { static void Main(string[] args) { string destTime = "2015-11-12 15:09:24"; SetServerTime(destTime); System.Console.WriteLine( DateTime.Now.ToLocalTime()); System.Console.ReadLine(); } public static void SetServerTime(string destTime) { ServerInfo.SetLocalTimeByStr(DateTime.Parse(destTime).ToString("yyyyMMddHHmmss")); } } }
时间: 2024-10-26 23:39:17