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