C#獲取Nist的美國官方標(biāo)準(zhǔn)時間的解決辦法 |
|
今天在csdn上見網(wǎng)友在問如何獲取Nist的美國官方標(biāo)準(zhǔn)時間,經(jīng)摸索、查資料和自己實踐后。 做出以下代碼,已測試。思路其實還是很簡單的: 1、發(fā)出對于指定網(wǎng)頁的訪問請求 2、獲取返回的html文件,進行模式匹配定位和分割,即取得了對應(yīng)的時間和日期 此方法,對于其他地方需從網(wǎng)頁獲取信息有可參考的。
命名空間需添加: using System.Net; using System.IO; using System.Text.RegularExpressions;
方法代碼:
//獲取美國官方時間和日期
private void GetNistTimeUS( out string time, out string Data )
 {
try
 {
//nist.的url
string strNistUrl = "http://nist./timezone.cgi?UTC/s/0";

//構(gòu)造并實例化一個WebRequest
System.Net.WebRequest myHttpWebRequest = System.Net.HttpWebRequest.Create( strNistUrl );
//設(shè)置連接超時時間
myHttpWebRequest.Timeout = 8000;
//設(shè)置WebResponse,接收返回信息
System.Net.WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse();
//獲取返回信息流信息
Stream sr = myHttpWebResponse.GetResponseStream();
//設(shè)置流閱讀器
StreamReader reader = new StreamReader(sr, System.Text.Encoding.ASCII);
//流輸出為字符串
String srdata = reader.ReadToEnd();
//將返回html文本中的雙引號變?yōu)閱我?/span>
srdata = srdata.Replace( "\"","\'");
//用模式匹配加分割的方式定位和獲取時間信息
string strOut = Regex.Split( srdata, "color='white'><b>" , RegexOptions.IgnoreCase)[1];
string strTime = Regex.Split( strOut , "<br>", RegexOptions.IgnoreCase )[0];
time = DateTime.Parse( strTime ).ToLongTimeString();
//用模式匹配加分割的方式定位和獲取日期信息
string strOut1 = Regex.Split( srdata, "'5' color='white'>" , RegexOptions.IgnoreCase)[1];
string strData = Regex.Split( strOut1 , "<br>", RegexOptions.IgnoreCase )[0];
Data = DateTime.Parse( strData ).ToShortDateString();
}
catch( System.Exception ex )
 {
time = string.Empty;
Data = string.Empty;
MessageBox.Show( "獲取時間出錯:" + ex.Message );
}
}
//獲取中國標(biāo)準(zhǔn)時間(由美國官方時間折算)
private void GetNistTimeCN( out string time, out string Data )
 {
try
 {
//nist.的url
string strNistUrl = "http://nist./timezone.cgi?UTC/s/0";

//構(gòu)造并實例化一個WebRequest
System.Net.WebRequest myHttpWebRequest = System.Net.HttpWebRequest.Create( strNistUrl );
//設(shè)置連接超時時間
myHttpWebRequest.Timeout = 8000;
//設(shè)置WebResponse,接收返回信息
System.Net.WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse();
//獲取返回信息流信息
Stream sr = myHttpWebResponse.GetResponseStream();
//設(shè)置流閱讀器
StreamReader reader = new StreamReader(sr, System.Text.Encoding.ASCII);
//流輸出為字符串
String srdata = reader.ReadToEnd();
//將返回html文本中的雙引號變?yōu)閱我?/span>
srdata = srdata.Replace( "\"","\'");
//用模式匹配加分割的方式定位和獲取時間信息
string strOut = Regex.Split( srdata, "color='white'><b>" , RegexOptions.IgnoreCase)[1];
string strTime = Regex.Split( strOut , "<br>", RegexOptions.IgnoreCase )[0];
//小時需調(diào)整,因時區(qū)相差8小時
time = DateTime.Parse( strTime ).AddHours( 8 ).ToLongTimeString();

//用模式匹配加分割的方式定位和獲取日期信息
string strOut1 = Regex.Split( srdata, "'5' color='white'>" , RegexOptions.IgnoreCase)[1];
string strData = Regex.Split( strOut1 , "<br>", RegexOptions.IgnoreCase )[0];
//獲取中國時間-小時部分
int intHourCn = int.Parse( time.Split( ':' )[0] );
//獲取美國時間-小時部分
int intHourUS = int.Parse( DateTime.Parse( strTime ).ToLongTimeString().Split( ':' )[0] );
//比較小時差異,調(diào)整日期差異
if ( intHourCn < intHourUS )
 {
Data = DateTime.Parse( strData ).AddDays(1).ToShortDateString();
}
else
 {
Data = DateTime.Parse( strData ).ToShortDateString();
}
}
catch( System.Exception ex )
 {
time = string.Empty;
Data = string.Empty;
MessageBox.Show( "獲取時間出錯:" + ex.Message );
}
}
調(diào)用代碼:
//獲取美國時間按鈕
private void btnGetTime_Click(object sender, System.EventArgs e)
 {
try
 {
string strTime = string.Empty;
string strDate = string.Empty;

GetNistTimeUS( out strTime, out strDate );
txtTime.Text = strTime;
txtData.Text = strDate;
}
catch( System.Exception ex )
 {
MessageBox.Show( ex.Message );
}
}

//獲取中國時間按鈕
private void btnGetTimeCN_Click(object sender, System.EventArgs e)
 {
try
 {
string strTime = string.Empty;
string strDate = string.Empty;

GetNistTimeCN( out strTime, out strDate );
txtTime.Text = strTime;
txtData.Text = strDate;
}
catch( System.Exception ex )
 {
MessageBox.Show( ex.Message );
}
}
|
|