C#同步網(wǎng)絡(luò)時(shí)間的方法實(shí)例詳解
本文實(shí)例講述了C#同步網(wǎng)絡(luò)時(shí)間的方法。分享給大家供大家參考。具體分析如下:
客戶的機(jī)器的系統(tǒng)時(shí)間經(jīng)常出錯(cuò),導(dǎo)致給他們做的軟件無法正常使用,所以后來就加了一個(gè)同步網(wǎng)絡(luò)時(shí)間的小功能。實(shí)現(xiàn)起來很簡單,但是卻很使用。
這個(gè)小功能就是先獲取網(wǎng)絡(luò)時(shí)間,然后將系統(tǒng)的時(shí)間修改成從網(wǎng)絡(luò)獲得的時(shí)間。下面是具體的實(shí)現(xiàn):
獲取網(wǎng)絡(luò)時(shí)間:
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>
/// 網(wǎng)絡(luò)時(shí)間
/// </summary>
public class NetTime
{
/// <summary>
/// 獲取標(biāo)準(zhǔn)北京時(shí)間,讀取http://www.beijing-time.org/time.asp
/// </summary>
/// <returns>返回網(wǎng)絡(luò)時(shí)間</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;
}
}
獲取網(wǎng)絡(luò)時(shí)間,返回一個(gè)DateTime對(duì)象,然后傳給設(shè)置系統(tǒng)時(shí)間的方法,修改系統(tǒng)時(shí)間。
同步系統(tǒng)時(shí)間:
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>
/// 更新系統(tǒng)時(shí)間
/// </summary>
public class UpdateTime
{
//設(shè)置系統(tǒng)時(shí)間的API函數(shù)
[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>
/// 設(shè)置系統(tǒng)時(shí)間
/// </summary>
/// <param name="dt">需要設(shè)置的時(shí)間</param>
/// <returns>返回系統(tǒng)時(shí)間設(shè)置狀態(tài),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;
}
}
兩個(gè)方法分別寫在了兩個(gè)類里面,只需要在客戶端實(shí)例化兩個(gè)對(duì)象,然后依次調(diào)用其方法即可,簡單實(shí)用。
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
- C# 委托的三種調(diào)用示例(同步調(diào)用 異步調(diào)用 異步回調(diào))
- c#(Socket)同步套接字代碼示例
- C#應(yīng)用BindingSource實(shí)現(xiàn)數(shù)據(jù)同步的方法
- c#.net多線程編程教學(xué)——線程同步
- C#同步、異步遠(yuǎn)程下載文件實(shí)例
- c#實(shí)現(xiàn)數(shù)據(jù)同步的方法(使用文件監(jiān)控對(duì)象filesystemwatcher)
- c#線程同步使用詳解示例
- 解析C#中委托的同步調(diào)用與異步調(diào)用(實(shí)例詳解)
- 基于C#實(shí)現(xiàn)的多生產(chǎn)者多消費(fèi)者同步問題實(shí)例
- C#使用AutoResetEvent實(shí)現(xiàn)同步
相關(guān)文章
Unity學(xué)習(xí)之FSM有限狀態(tài)機(jī)
這篇文章主要介紹了Unity學(xué)習(xí)之FSM有限狀態(tài)機(jī),通過詳細(xì)的代碼案例來進(jìn)行解析說明,希望這篇文章對(duì)你有所幫助2021-06-06
C# 7.0之ref locals and returns(局部變量和引用返回)
這篇文章主要介紹了C# 7.0之ref locals and returns,即局部變量和引用返回,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
C#中判斷、驗(yàn)證字符串是否為日期格式的實(shí)現(xiàn)代碼
這篇文章主要介紹了C#中判斷、驗(yàn)證字符串是否為日期格式的實(shí)現(xiàn)代碼,使用DateTime類中自帶的兩個(gè)方法實(shí)現(xiàn),需要的朋友可以參考下2014-08-08
C#結(jié)合html2canvas切割圖片并導(dǎo)出到PDF
html2canvas?是一個(gè)?JavaScript?庫,它可以把任意一個(gè)網(wǎng)頁中的元素繪制到指定的?canvas?中,本文將結(jié)合html2canvas進(jìn)行切割圖片并導(dǎo)出到PDF,感興趣的可以了解下2025-02-02
c#文件的復(fù)制,移動(dòng),創(chuàng)建(實(shí)例代碼)
c#文件的復(fù)制,移動(dòng),創(chuàng)建(實(shí)例代碼),需要的朋友可以參考一下2013-04-04

