我們?cè)诰幊讨?,通常都需要處理時(shí)間日期數(shù)據(jù),這也是一種比較難于處理的數(shù)據(jù)類(lèi)型,因?yàn)闀r(shí)間日期類(lèi)型的結(jié)構(gòu)相當(dāng)復(fù)雜,并且還有一定的規(guī)則,如果在定義的時(shí)候不符合規(guī)則,程序在編譯的時(shí)候就會(huì)出錯(cuò)。在Visual Basic .Net用以處理時(shí)間日期類(lèi)型的結(jié)構(gòu)(Structure)主要是2個(gè),分別為DateTime和TimeSpan,這二個(gè)結(jié)構(gòu)都位于命名空間System,并且在Visual Basic .Net中自己也定義了一種數(shù)據(jù)類(lèi)型Date,這種數(shù)據(jù)類(lèi)型相當(dāng)于上面提及的DateTime類(lèi)。這時(shí)候可能很多朋友會(huì)問(wèn)了,什么叫結(jié)構(gòu),它有什么作用?其實(shí)結(jié)構(gòu)和類(lèi)在作用和功能上是非常類(lèi)似的,它也有構(gòu)造函數(shù),二者的主要區(qū)別如下:
1. 結(jié)構(gòu)不能包含顯式的無(wú)參數(shù)構(gòu)造函數(shù)。結(jié)構(gòu)成員將自動(dòng)初始化為它們的默認(rèn)值。
2. 結(jié)構(gòu)不能有以下形式的初始值設(shè)定項(xiàng):base。
其實(shí)對(duì)于大多數(shù)朋友,你具體使用結(jié)構(gòu)和類(lèi)的時(shí)候,完全可以不需要考慮到二者區(qū)別,因?yàn)槎咴谑褂蒙蠋缀跸嗤?/P>
雖然Visual Basic .Net中提供了Date數(shù)據(jù)類(lèi)型來(lái)處理時(shí)間日期類(lèi)型,但在實(shí)際中往往并不使用它,因?yàn)樗亩x非常麻煩,加上時(shí)間日期類(lèi)型結(jié)構(gòu)相當(dāng)復(fù)雜,對(duì)于很多初學(xué)者往往會(huì)出現(xiàn)錯(cuò)誤。下面就是在Visual Basic .Net中通過(guò)Date數(shù)據(jù)類(lèi)型定義一個(gè)時(shí)間日期類(lèi)型數(shù)據(jù)變量的語(yǔ)句,就可見(jiàn)其煩雜了:
Dim s As Date = #12/2/2002 7:00:00 PM#
在定義Date數(shù)據(jù)類(lèi)型時(shí)候,必須注意下面三點(diǎn):
1. Date數(shù)值必須以數(shù)字符號(hào)"#"括起來(lái)。
2. Date數(shù)值中的日期數(shù)據(jù)可有可無(wú),如果有必須符合格式"m/d/yyyy"。
3. Date數(shù)值中的時(shí)間數(shù)據(jù)可有可無(wú),如果有必須和日期數(shù)據(jù)通過(guò)空格分開(kāi),并且時(shí)分秒之間以":"分開(kāi)。
一.DateTime和TimeSpan的關(guān)系和區(qū)別:
DateTime和TimeSpan是Visual Basic .Net中用以處理時(shí)間日期類(lèi)型數(shù)據(jù)的二個(gè)主要的結(jié)構(gòu),這二者的區(qū)別在于,DatTime表示一個(gè)固定的時(shí)間,而TimeSpan表示的是一個(gè)時(shí)間間隔,即一段時(shí)間。在下面介紹的程序示例中,TimeSpan就用以當(dāng)前時(shí)間和給定時(shí)間之差。
二.DateTime和TimeSpan中的常用成員及其說(shuō)明:
DateTime結(jié)構(gòu)和TimeSpan結(jié)構(gòu)提供了豐富的方法和屬性,通過(guò)這些方法和屬性,幾乎可以直接處理任何時(shí)間日期類(lèi)型數(shù)據(jù)。表01和表02分別是DateTime結(jié)構(gòu)的常用屬性和常用方法及其說(shuō)明:




三.DateTime和TimeSpan中常用成員的使用方法及其使用技巧:
在了解了DateTime和TimeSpan的常用方法和常用屬性后,下面將通過(guò)一個(gè)示例來(lái)掌握上述方法和屬性的用法。在下面的示例中將著重介紹下列問(wèn)題的處理方法:
1. 判斷輸入的日期時(shí)間字符串的合法性。
2. DateTime實(shí)例之間的運(yùn)算。
3. 日期時(shí)間數(shù)據(jù)的獲取方法。
下面是用Visual Basic .Net實(shí)現(xiàn)上述功能的示例的主要步驟:
1. 啟動(dòng)Visual Studio .Net。
2. 選擇菜單【文件】|【新建】|【項(xiàng)目】后,彈出【新建項(xiàng)目】對(duì)話(huà)框。
3. 將【項(xiàng)目類(lèi)型】設(shè)置為【Visual Basic項(xiàng)目】。
4. 將【模板】設(shè)置為【W(wǎng)indows應(yīng)用程序】。
5. 在【名稱(chēng)】文本框中輸入【處理日期時(shí)間數(shù)據(jù)】。
6. 在【位置】的文本框中輸入【E:\VS.NET項(xiàng)目】,然后單擊【確定】按鈕,這樣在"E:\VS.NET項(xiàng)目"目錄中就產(chǎn)生了名稱(chēng)為"處理日期時(shí)間數(shù)據(jù)"的文件夾,并在里面創(chuàng)建了名稱(chēng)為【處理日期時(shí)間數(shù)據(jù)】的項(xiàng)目文件。
7. 把Visual Studio .Net的當(dāng)前窗口切換到【Form1.vb(設(shè)計(jì))】窗口,并從【工具箱】中的【W(wǎng)indows窗體組件】選項(xiàng)卡中往Form1窗體中拖入下列組件,并執(zhí)行相應(yīng)操作:
一個(gè)TabControl組件。
三個(gè)TabPage組件。
十九個(gè)Label組件。
十九個(gè)TextBox組件,用以顯示時(shí)間日期數(shù)值。
三個(gè)Button組件,分別是Button1至Button3,并在這三個(gè)Button組件拖入Form1的設(shè)計(jì)窗體后,分別雙擊這三個(gè)組件,這樣系統(tǒng)會(huì)在Form1.vb文件分別產(chǎn)生這三個(gè)組件的Click時(shí)間對(duì)應(yīng)的處理代碼。
8. 按照?qǐng)D01、圖02、圖03設(shè)定設(shè)定組件的主要屬性

圖01:【處理日期時(shí)間數(shù)據(jù)】設(shè)計(jì)界面之一

圖02:【處理日期時(shí)間數(shù)據(jù)】設(shè)計(jì)界面之二

圖03:【處理日期時(shí)間數(shù)據(jù)】設(shè)計(jì)界面之三
在完成上面的工作以后,下面就進(jìn)入程序的功能實(shí)現(xiàn)階段。
9. 判斷輸入的日期時(shí)間字符串的合法性。為了實(shí)現(xiàn)這個(gè)功能,首先要掌握把輸入的日期時(shí)間字符串轉(zhuǎn)換成可供Visual Basic .Net使用的日期時(shí)間類(lèi)型的數(shù)據(jù)的方法。這個(gè)方法就是使用DateTime中的Parse方法,Parse方法能夠把一個(gè)符合日期時(shí)間的字符串轉(zhuǎn)換成一個(gè)DateTime實(shí)例。下面是一個(gè)具體的轉(zhuǎn)換代碼:
Dim dtTemp as System.DateTime = System.DateTime.Parse ( "12/2/2002 13:20:25")
但如果給定要轉(zhuǎn)換的字符串不合法,程序在執(zhí)行的時(shí)候就會(huì)出現(xiàn)異常。程序通過(guò)對(duì)異常的捕獲,來(lái)判斷給定要轉(zhuǎn)換的字符串合法性。在Visual Basic .Net中捕獲異常一般使用的是Try …Catch ….End Try語(yǔ)句。這里要注意的是Try …Catch ….End Try語(yǔ)句是一個(gè)非常重要的語(yǔ)句,在后面章節(jié)中的很多關(guān)鍵代碼部分都會(huì)經(jīng)常的使用到它,通過(guò)它的確能夠解決很多麻煩的問(wèn)題。
下面是在本程序中實(shí)現(xiàn)這個(gè)功能的具體操作步驟:
首先把Visual Studio .Net的當(dāng)前窗口切換到【Form1.vb】,進(jìn)入Form1.vb文件的編輯界面。然后用下列的代碼替換Form1.vb中Button3組件的Click事件對(duì)應(yīng)的處理代碼。
Private Sub Button3_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button3.Click
Dim dtMyDate As System.DateTime
Try
dtMyDate = DateTime.Parse ( TextBox19.Text )
'轉(zhuǎn)換給定的日期時(shí)間字符串
Catch
MessageBox.Show ( "輸入的時(shí)間日期字符串不合法!", "錯(cuò)誤!" )
'提示出錯(cuò)
TextBox19.Text = ""
Return
End Try
'以上是判斷輸入日期時(shí)間字符串合法性的典型代碼
End Sub
10. 獲取計(jì)算機(jī)日期時(shí)間數(shù)據(jù)。程序要實(shí)現(xiàn)這個(gè)功能非常簡(jiǎn)單,只需要掌握表01和表02中列出的DateTime常用屬性、方法的使用方法就能夠方便完成了。具體到本程序具體的操作是用下列代碼替換Form1.vb中Button2的Click事件對(duì)應(yīng)的處理代碼:
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
Dim dMyDate As DateTime = DateTime.Now
'創(chuàng)建實(shí)例,此實(shí)例存放當(dāng)前日期和時(shí)間
TextBox1.Text = dMyDate.ToString ( )
'顯示當(dāng)前日期和時(shí)間
TextBox2.Text = dMyDate.Date
'顯示當(dāng)前日期
TextBox3.Text = dMyDate.Year
'顯示年度
TextBox4.Text = dMyDate.Month
'顯示月份
TextBox5.Text = dMyDate.Day
'顯示日號(hào)
TextBox6.Text = dMyDate.DayOfYear
'顯示當(dāng)前天是一年中的第多少天
TextBox7.Text = dMyDate.DayOfWeek
'顯示當(dāng)前天是本星期中的第多少天
TextBox8.Text = dMyDate.ToLongDateString
'以長(zhǎng)日期形式來(lái)顯示日期
TextBox9.Text = dMyDate.ToShortDateString
'以短日期形式來(lái)顯示日期
TextBox18.Text = dMyDate.TimeOfDay.ToString ( )
'顯示當(dāng)前時(shí)間
TextBox17.Text = dMyDate.Hour
'顯示當(dāng)前時(shí)間的小時(shí)
TextBox16.Text = dMyDate.Minute
'顯示當(dāng)前時(shí)間的分鐘
TextBox15.Text = dMyDate.Second
'顯示當(dāng)前時(shí)間的秒
TextBox14.Text = dMyDate.Millisecond
'顯示當(dāng)前時(shí)間的毫秒
TextBox13.Text = dMyDate.ToLongTimeString
'以長(zhǎng)時(shí)間形式來(lái)顯示當(dāng)前時(shí)間
TextBox12.Text = dMyDate.ToShortTimeString
'以短時(shí)間形式來(lái)顯示當(dāng)前時(shí)間
End Sub
11. 日期時(shí)間數(shù)據(jù)的運(yùn)算。在下面介紹的代碼是實(shí)現(xiàn)二個(gè)DateTime實(shí)例之差,即當(dāng)前的時(shí)間和給定的時(shí)間之差。解決的步驟是首先判斷給定的日期時(shí)間字符串的合法性,如果不合法,則返回。如果合法,則以此來(lái)創(chuàng)建DateTime實(shí)例dtMyDate。然后dtMyDate調(diào)用其Subtract方法減去當(dāng)前的時(shí)間,并存放到TimeSpan實(shí)例tsTemp。tsTemp調(diào)用其Duration方法把二者之差的絕對(duì)值顯示出來(lái)。具體到程序中的實(shí)現(xiàn)方法是用下列代碼替換Form1.vb中的Button2的Click事件的處理代碼:
Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.Click
Dim tsTemp As TimeSpan
Dim dtMyDate As DateTime
Try
dtMyDate = DateTime.Parse ( TextBox10.Text )
Catch
MessageBox.Show ( "輸入的時(shí)間日期字符串不合法!" , "錯(cuò)誤!" )
|