VB.NET輕松學會處理時間技巧(一)


       我們在編程中,通常都需要處理時間日期數據,這也是一種比較難於處理的數據類型,因為時間日期類型的結構相當復雜,並且還有一定的規則,如果在定義的時候不符合規則,程序在編譯的時候就會出錯。在Visual Basic .Net用以處理時間日期類型的結構(Structure)主要是2個,分別為DateTimeTimeSpan,這二個結構都位於命名空間System,並且在Visual Basic .Net中自己也定義了一種數據類型Date,這種數據類型相當於上面提及的DateTime類。這時候可能很多朋友會問了,什么叫結構,它有什么作用?其實結構和類在作用和功能上是非常類似的,它也有構造函數,二者的主要區別如下:

  1. 結構不能包含顯式的無參數構造函數。結構成員將自動初始化為它們的默認值。
  2. 結構不能有以下形式的初始值設定項:base。

  其實對於大多數朋友,你具體使用結構和類的時候,完全可以不需要考慮到二者區別,因為二者在使用上幾乎相同。

  雖然Visual Basic .Net中提供了Date數據類型來處理時間日期類型,但在實際中往往並不使用它,因為它的定義非常麻煩,加上時間日期類型結構相當復雜,對於很多初學者往往會出現錯誤。下面就是在Visual Basic .Net中通過Date數據類型定義一個時間日期類型數據變量的語句,就可見其煩雜了:

    Dim s As Date = #12/2/2002 7:00:00 PM#

  在定義Date數據類型時候,必須注意下面三點

  1. Date數值必須以數字符號"#"括起來。
  2. Date數值中的日期數據可有可無,如果有必須符合格式"m/d/yyyy"。
  3. Date數值中的時間數據可有可無,如果有必須和日期數據通過空格分開,並且時分秒之間以":"分開。

  一.DateTime和TimeSpan的關系和區別:
  DateTime和TimeSpan是Visual Basic .Net中用以處理時間日期類型數據的二個主要的結構,這二者的區別在於,DatTime表示一個固定的時間,而TimeSpan表示的是一個時間間隔,即一段時間。在下面介紹的程序示例中,TimeSpan就用以當前時間和給定時間之差。

  二.DateTime和TimeSpan中的常用成員及其說明:

  DateTime結構和TimeSpan結構提供了豐富的方法和屬性,通過這些方法和屬性,幾乎可以直接處理任何時間日期類型數據。

表01和表02分別是DateTime結構的常用屬性和常用方法及其說明:

屬性

說明

date

獲取此實例的日期部分。

day

獲取此實例所表示的日期為該月中的第幾天。

dayofweek

獲取此實例所表示的日期是星期幾。

dayofyear

獲取此實例所表示的日期是該年中的第幾天。

hour

獲取此實例所表示日期的小時部分。

millisecond

獲取此實例所表示日期的毫秒部分。

minute

獲取此實例所表示日期的分鍾部分。

month

獲取此實例所表示日期的月份部分。

now

創建一個datetime實例,它是此計算機上的當前本地日期和時間。

second

獲取此實例所表示日期的秒部分。

timeofday

獲取此實例的當天的時間。

today

獲取當前日期。

year

獲取此實例所表示日期的年份部分。

表01:datetime類的常用屬性及其說明

方法

說明

add

將指定的timespan的值加到此實例的值上。

adddays

將指定的天數加到此實例的值上。

addhours

將指定的小時數加到此實例的值上。

addmilliseconds

將指定的毫秒數加到此實例的值上。

addminutes

將指定的分鍾數加到此實例的值上。

addmonths

將指定的月份數加到此實例的值上。

addseconds

將指定的秒數加到此實例的值上。

addyears

將指定的年份數加到此實例的值上。

daysinmonth

返回指定年份中指定月份的天數。

isleapyear

返回指定的年份是否為閏年的指示。

parse

將日期和時間的指定字符串表示轉換成其等效的datetime實例。

subtract

從此實例中減去指定的時間或持續時間。

tolongdatestring

將此實例的值轉換為其等效的長日期字符串表示形式。

tolongtimestring

將此實例的值轉換為其等效的長時間字符串表示形式。

toshorttimestring

將此實例的值轉換為其等效的短時間字符串表示形式。

toshortdatestring

將此實例的值轉換為其等效的短日期字符串表示形式。


表02:datetime結構的常用方法及其說明

表03和表04分別是timespan結構的常用屬性和常用方法及其說明:


屬性

說明

days

獲取由此實例表示的整天數。

hours

獲取由此實例表示的整小時數。

milliseconds

獲取由此實例表示的整毫秒數。

minutes

獲取由此實例表示的整分鍾數。

seconds

獲取由此實例表示的整秒數。

ticks

獲取用刻度表示的此實例的值。

totaldays

獲取以整天數和天的小數部分表示的此實例的值。

totalhours

獲取以整小時數和小時的小數部分表示的此實例的值。

totalmilliseconds

獲取以整毫秒數和毫秒的小數部分表示的此實例的值。

totalminutes

獲取以整分鍾數和分鍾的小數部分表示的此實例的值。

totalseconds

獲取以整秒數和秒的小數部分表示的此實例的值。

表03:timespan結構的常用屬性及其說明


方法

說明

add

將指定的timespan添加到此實例中。

duration

返回其值為此實例的絕對值的timespan。

fromdays

返回表示指定天數的timespan,其中對天數的指定精確到最接近的毫秒。

fromhours

返回表示指定小時數的timespan,其中對小時數的指定精確到最接近的毫秒。

frommilliseconds

返回表示指定毫秒數的timespan。

fromminutes

返回表示指定分鍾數的timespan,其中對分鍾數的指定精確到最接近的毫秒。

fromseconds

返回表示指定秒數的timespan,其中對秒數的指定精確到最接近的毫秒。

subtract

從此實例中減去指定的timespan。

表04:timespan結構的常用方法及其說明


=======================下面為實例========================


三.DateTime和TimeSpan中常用成員的使用方法及其使用技巧:

  
在了解了DateTime和TimeSpan的常用方法和常用屬性后,下面將通過一個示例來掌握上述方法和屬性的用法。在下面的示例中將着重介紹下列問題的處理方法:

  1. 判斷輸入的日期時間字符串的合法性。
  2. DateTime實例之間的運算。
  3. 日期時間數據的獲取方法。

  下面是用Visual Basic .Net實現上述功能的示例的主要步驟:

    1. 啟動 Visual Studio .Net。
  2. 選擇菜單【文件】|【新建】|【項目】后,彈出【新建項目】對話框。

   3. 將【項目類型】設置為【Visual Basic項目】。
  4. 將【模板】設置為【Windows窗體應用程序】。
  5. 在【名稱】文本框中輸入【處理日期時間數據】。
  6. 在【位置】的文本框中輸入【E:\VS.NET項目】,然后單擊【確定】按鈕,這樣在"E:\VS.NET項目"目錄中就產生了名稱為"處理日期時間數據"的文件夾,並在里面創建了名稱為【處理日期時間數據】的項目文件。
  7. 把Visual Studio .Net的當前窗口切換到【Form1.vb(設計)】窗口,並從【工具箱】中的【Windows窗體組件】選項卡中往Form1窗體中拖入下列組件,並執行相應操作:

  一個TabControl組件(包含三個TabPage組件.)
  十九個Label組件。
  十九個TextBox組件,用以顯示時間日期數值。
  三個Button組件,並在這三個Button組件拖入Form1的設計窗體后,分別雙擊這三個組件,這樣系統會在Form1.vb文件分別產生這三個組件的Click時間對應的處理代碼。

  8. 按照圖01、圖02、圖03設定設定組件的主要屬性


  圖01:【處理日期時間數據】設計界面之一



圖02:【處理日期時間數據】設計界面之二


圖03:【處理日期時間數據】設計界面之三


  在完成上面的工作以后,下面就進入程序的功能實現階段。

    9. 判斷輸入的日期時間字符串的合法性。為了實現這個功能,首先要掌握把輸入的日期時間字符串轉換成可供Visual Basic .Net使用的日期時間類型的數據的方法。這個方法就是使用DateTime中的Parse方法,Parse方法能夠把一個符合日期時間的字符串轉換成一個DateTime實例。下面是一個具體的轉換代碼:
Dim dtTemp as System.DateTime = System.DateTime.Parse ( "12/2/2002 13:20:25")
但如果給定要轉換的字符串不合法,程序在執行的時候就會出現異常。程序通過對異常的捕獲,來判斷給定要轉換的字符串合法性。在Visual Basic .Net中捕獲異常一般使用的是Try …Catch ….End Try語句。這里要注意的是Try …Catch ….End Try語句是一個非常重要的語句,在后面章節中的很多關鍵代碼部分都會經常的使用到它,通過它的確能夠解決很多麻煩的問題。

下面是在本程序中實現這個功能的具體操作步驟:

  首先把Visual Studio .Net的當前窗口切換到【Form1.vb】,進入Form1.vb文件的編輯界面。然后用下列的代碼替換Form1.vb中btnJudge組件的Click事件對應的處理代碼。

  

  1. <pre name="code" class="vb"><pre name="code" class="vb">'判斷輸入日期時間字符串合法性  
  2.     Private Sub btnJudge_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnJudge.Click  
  3.         Dim dtMyDate As System.DateTime  
  4.   
  5.         Try  
  6.             dtMyDate = DateTime.Parse(txtDateTime.Text) '轉換給定的日期時間字符串  
  7.   
  8.         Catch  
  9.   
  10.             MessageBox.Show("你輸入的時間日期字符串不合法!""錯誤!")  '提示錯誤  
  11.             txtDateTime.Text = ""  
  12.             Return  
  13.   
  14.         End Try  
  15.     End Sub  

    10. 獲取計算機日期時間數據。程序要實現這個功能非常簡單,只需要掌握表01和表02中列出的DateTime常用屬性、方法的使用方法就能夠方便完成了。具體到本程序具體的操作是用下列代碼替換Form1.vb中btnDateTimeNow的Click事件對應的處理代碼:

 
        
 
        

  1. '獲得計算機日期、時間  
  2.     Private Sub btnDateTimeNow_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnDateTimeNow.Click  
  3.         '創建實例,此實例存放當前日期和時間  
  4.         Dim dMyDate As DateTime = DateTime.Now  
  5.   
  6.         '顯示當前日期和時間  
  7.         txtDateTimeNow.Text = dMyDate.ToString()  
  8.   
  9.         '顯示當前日期  
  10.         txtDateNow.Text = dMyDate.Date  
  11.   
  12.         '顯示當前年度  
  13.         txtYear.Text = dMyDate.Year  
  14.   
  15.         '顯示當前月份  
  16.         txtMonth.Text = dMyDate.Month  
  17.   
  18.         '顯示日號  
  19.         txtDay.Text = dMyDate.Day  
  20.   
  21.         '顯示當前天是一年中的第多少天  
  22.         txtDayofyear.Text = dMyDate.DayOfYear  
  23.   
  24.         '顯示當前天是本星期中的第多少天  
  25.         txtWeek.Text = dMyDate.DayOfWeek  
  26.   
  27.         '以長日期形式來顯示日期  
  28.         txtDateLong.Text = dMyDate.ToLongDateString  
  29.   
  30.         '以短日期形式來顯示日期  
  31.         txtDateShort.Text = dMyDate.ToShortDateString  
  32.   
  33.         '顯示當前時間  
  34.         txtTimeNow.Text = dMyDate.TimeOfDay.ToString()  
  35.   
  36.         '顯示當前時間的小時  
  37.         txtHour.Text = dMyDate.Hour  
  38.   
  39.         '顯示當前時間的分鍾  
  40.         txtMinute.Text = dMyDate.Minute  
  41.   
  42.         '顯示當前時間的秒  
  43.         txtSecond.Text = dMyDate.Second  
  44.   
  45.         '顯示當前時間的毫秒  
  46.         txtMillisecond.Text = dMyDate.Millisecond  
  47.   
  48.         '以長時間形式來顯示當前時間  
  49.         txtTimeLong.Text = dMyDate.ToLongTimeString  
  50.   
  51.         '以短時間形式來顯示當前時間  
  52.         txtTimeShort.Text = dMyDate.ToShortTimeString  
  53.     End Sub  

    11. 日期時間數據的運算。在下面介紹的代碼是實現二個DateTime實例之差,即當前的時間和給定的時間之差。解決的步驟是首先判斷給定的日期時間字符串的合法性,如果不合法,則返回。如果合法,則以此來創建DateTime實例dtMyDate。然后dtMyDate調用其Subtract方法減去當前的時間,並存放到TimeSpan實例tsTemp。tsTemp調用其Duration方法把二者之差的絕對值顯示出來。具體到程序中的實現方法是用下列代碼替換Form1.vb中的btnOK的Click事件的處理代碼:

  1. <pre name="code" class="vb">'輸入時間與系統時間之差  
  2.     Private Sub btnOK_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnOK.Click  
  3.         Dim tsTemp As TimeSpan  
  4.         Dim dtMydate As DateTime  
  5.         '判斷輸入的時間日期字符串的合法性  
  6.         Try  
  7.             dtMydate = DateTime.Parse(txtDateTimeEnter.Text)  
  8.         Catch  
  9.             MessageBox.Show("輸入的時間日期字符串不合法""錯誤!")  
  10.             Return  
  11.   
  12.         End Try  
  13.   
  14.         '兩個DateTime實例相減  
  15.         tsTemp = dtMydate.Subtract(DateTime.Now)  
  16.   
  17.         '取兩個各DateTime之差絕對值,並顯示出來  
  18.         txtTimeDifference.Text = tsTemp.Duration.ToString()  
  19.     End Sub  


 
            至此在上述步驟都正確執行,並成功保存后,【處理日期時間數據】項目的全部工作就完成了。圖04、圖05和圖06分別是【處理日期時間數據】項目編譯后的運行界面:


圖04:【處理日期時間數據】運行界面之一



圖05:【處理日期時間數據】運行界面之二



圖06:【處理日期時間數據】運行界面之三


四.小結:

  本文介紹在Visual Basic .Net中日期時間類型數據的處理方法及在處理這些數據時的一些注意事項和技巧。以下就是本文中的知識點:

  1. 結構和類的區別。
  2. 用Date變量定義日期時間,及其注意事項。
  3. DateTime和TimeSpan的主要區別,和二者主要的成員及其簡單說明。
  4. 判斷給定時間日期的合法性。
  5. 日期時間類型數據(DateTime實例)的運算。
  6. 日期時間及其相關數值的獲取。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM