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

作者:刘水镜 时间:2021-10-24 15:47:47 

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

标签:C#,同步,网络时间
0
投稿

猜你喜欢

  • 解决Android Studio安装后运行出错dose not...和Internal error...

    2023-04-24 11:54:42
  • spring boot如何使用AOP统一处理web请求

    2023-05-16 14:15:11
  • 混合语言编程—C#使用原生的Directx和OpenGL绘图的方法

    2022-06-18 14:36:41
  • Java中String类常用类型实例总结

    2023-07-06 19:15:43
  • SpringCache框架加载/拦截原理详解

    2023-04-11 10:31:46
  • C#如何快速释放内存的大数组详解

    2021-12-14 18:42:33
  • Android 实现调用系统照相机拍照和录像的功能

    2021-12-05 10:58:51
  • SpringBoot整合canal实现数据同步的示例代码

    2022-05-07 19:51:24
  • 介绍java中Pair(配对)

    2021-09-03 10:15:39
  • 详解三种java实现多线程的方式

    2021-11-02 10:09:30
  • java开发MVC三层架构上再加一层Manager层原理详解

    2023-06-14 06:10:51
  • C#下载歌词文件的同步和异步方法

    2023-04-11 22:46:49
  • C# 写入XML文档三种方法详细介绍

    2021-11-08 23:20:08
  • Java中Collections.sort的使用

    2022-08-20 04:31:49
  • c# AcceptEx与完成端口(IOCP)结合的示例

    2023-07-29 01:46:24
  • java文件操作工具类分享(file文件工具类)

    2023-11-24 22:32:47
  • Go Java算法之K个重复字符最长子串详解

    2022-02-10 17:53:29
  • Java抽象类与接口区别详解

    2021-06-19 19:22:37
  • 阿里云发布 Spring Boot 新脚手架工程

    2023-10-08 04:43:12
  • Java基本数据类型族谱与易错点梳理解析

    2021-08-18 10:20:27
  • asp之家 软件编程 m.aspxhome.com