首页 > 编程 > C# > 正文

C#同步网络时间的方法实例详解

2020-01-24 01:53:29
字体:
来源:转载
供稿:网友

本文实例讲述了C#同步网络时间的方法。分享给大家供大家参考。具体分析如下:

客户的机器的系统时间经常出错,导致给他们做的软件无法正常使用,所以后来就加了一个同步网络时间的小功能。实现起来很简单,但是却很使用。

这个小功能就是先获取网络时间,然后将系统的时间修改成从网络获得的时间。下面是具体的实现:

获取网络时间:

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对象,然后传给设置系统时间的方法,修改系统时间。

同步系统时间:

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

两个方法分别写在了两个类里面,只需要在客户端实例化两个对象,然后依次调用其方法即可,简单实用。

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表