欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-11 07:50:11
本文实例讲述了c#同步网络时间的方法。分享给大家供大家参考。具体分析如下: 客户的机器的系统时间经常出错,导致给他们做的软件无法正常使用,所以后来就加了一个同步网络时间的...

本文实例讲述了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#程序设计有所帮助。