C#同步网络时间

客户的机器的系统时间经常出错,导致给他们做的软件无法正常使用,所以后来就加了一个同步网络时间的小功能。实现起来很简单,但是却很使用。
 
这个小功能就是先获取网络时间,然后将系统的时间修改成从网络获得的时间。下面是具体的实现:
 
获取网络时间: 
[csharp]  
using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Text;    
using System.IO;    
using System.Net;    
using System.Net.Sockets;    
using System.Text.RegularExpressions;    
using System.Runtime.InteropServices;  
using System.Runtime;      
  
  
  
    /// <summary>    
    /// 网络时间    
    /// </summary>    
    public class NetTime  
    {  
         
        /// <summary>    
        /// 获取标准北京时间,读取http://www.beijing-time.org/time. asp    
        /// </summary>    
        /// <returns>返回网络时间</returns>    
        public DateTime GetBeijingTime()  
        {  
           
            DateTime dt;  
            WebRequest wrt = null;  
            WebResponse wrp = null;  
            try  
            {  
                wrt = WebRequest.Create("http://www.beijing-time.org/time.asp");  
                wrp = wrt.GetResponse();  
  
                string html = string.Empty;  
                using (Stream stream = wrp.GetResponseStream())  
                {  
                    using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))  
                    {  
                        html = sr.ReadToEnd();  
                    }  
                }  
  
                string[] tempArray = html.Split(';');  
                for (int i = 0; i < tempArray.Length; i++)  
                {  
                    tempArray[i] = tempArray[i].Replace("\r\n", "");  
                }  
  
                string year = tempArray[1].Split('=')[1];  
                string month = tempArray[2].Split('=')[1];  
                string day = tempArray[3].Split('=')[1];  
                string hour = tempArray[5].Split('=')[1];  
                string minite = tempArray[6].Split('=')[1];  
                string second = tempArray[7].Split('=')[1];  
  
                dt = DateTime.Parse(year + "-" + month + "-" + day + " " + hour + ":" + minite + ":" + second);  
            }  
            catch (WebException)  
            {  
                return DateTime.Parse("2011-1-1");  
            }  
            catch (Exception)  
            {  
                return DateTime.Parse("2011-1-1");  
            }  
            finally  
            {  
                if (wrp != null)  
                    wrp.Close();  
                if (wrt != null)  
                    wrt.Abort();  
            }  
            return dt;  
  
        }  
    }  
 
 
 
获取网络时间,返回一个DateTime对象,然后传给设置系统时间的方法,修改系统时间。
同步系统时间:
[csharp]  
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.IO;  
using System.Net;  
using System.Net.Sockets;  
using System.Text.RegularExpressions;  
using System.Runtime.InteropServices;  
using System.Runtime;      
  
  
    /// <summary>  
    /// 更新系统时间  
    /// </summary>  
    public class UpdateTime  
    {  
        //设置系统时间的API函数  
        [DllImport("kernel32.dll")]  
        private static extern bool SetLocalTime(ref SYSTEMTIME time);  
  
        [StructLayout(LayoutKind.Sequential)]  
        private struct SYSTEMTIME  
        {  
            public short year;  
            public short month;  
            public short dayOfWeek;  
            public short day;  
            public short hour;  
            public short minute;  
            public short second;  
            public short milliseconds;  
        }  
  
        /// <summary>  
        /// 设置系统时间  
        /// </summary>  
        /// <param name="dt">需要设置的时间</param>  
        /// <returns>返回系统时间设置状态,true为成功,false为失败</returns>  
        public static bool SetDate(DateTime dt)  
        {  
            SYSTEMTIME st;  
  
            st.year = (short)dt.Year;  
            st.month = (short)dt.Month;  
            st.dayOfWeek = (short)dt.DayOfWeek;  
            st.day = (short)dt.Day;  
            st.hour = (short)dt.Hour;  
            st.minute = (short)dt.Minute;  
            st.second = (short)dt.Second;  
            st.milliseconds = (short)dt.Millisecond;  
            bool rt = SetLocalTime(ref st);  
            return rt;  
        }  
    }  
 
两个方法分别写在了两个类里面,只需要在客户端实例化两个对象,然后依次调用其方法即可,简单实用。
 
PS:Win8修改系统时间需要管理员的权限,下篇博客介绍如何让程序默认以管理员权限运行,敬请期待!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值