C#更改系統時間

核心代碼:

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"));
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章