官术网_书友最值得收藏!

第6章 日期函數

在前一章中介紹了VB語言基礎中的基本函數的功能和基本用法。本章在前面的基礎之上接著介紹另外一種類型的函數——日期函數,這是廣義的說法,狹義上,應該是日期和時間函數,這類函數主要與時間和日期有關,在編程過程中,這類函數的應用也是很廣泛的。

6.1 Data返回系統當前的日期

在VB中,日期函數有許多種,例如,Date函數,Time函數,Hour函數等。本章的開始首先介紹最簡單的日期函數——Data,這個函數返回系統當前的日期。

技術要點

在本實例中主要使用的技術是Date函數和日期控件DTPicker,主要功能和用法如下:

● Date函數,主要返回包含系統日期的可變型日期。

●日期控件DTPicker,主要用于顯示時間,設定時間使用控件的Value屬性進行。

Date函數的具體語法為:

        Date

實現代碼

        '退出系統命令
        Private Sub CmdExit_Click()
            Unload Me                                   '卸載窗體
        End Sub
        '保存信息命令
        Private Sub CmdSave_Click()
        MsgBox "信息保存成功!",vbOKOnly,"信息提示!" '提示“信息保存成功”的信息
        End Sub
        '初始化,給各文本框賦初值
        Private Sub Form_Load()
            TxtName.Text = "王五"                     '給"TxtName"文本框賦值為"王五"
            TxtSex.Text = "男"                        '給"TxtSex"文本框賦值為"男"
            TxtAge.Text = "18"                        '給"TxtAge"文本框賦值為"18"
            TxtAcademy.Text = "計算機學院"            '給"TxtAcademy"文本框賦值為"計算機學院"
            TxtSpec.Text = "計算機科學與技術專業"     '給"TxtSpec"文本框賦值為"計算機科學與技術專業"
            TxtAddress.Text = "黑龍江省哈爾濱市"      '給"TxtAddress"文本框賦值為"黑龍江省哈爾濱市"
            DTPicker1.Value = Date                      'Date返回系統日期
            TxtRemark.Text = "無"                     '給"TxtRemark"文本框賦值為"無"
        End Sub

單擊工具欄中的保存按鈕,保存工程,然后單擊工具欄中的啟動按鈕,運行工程,程序的運行結果如圖6.1所示。當單擊“保存繳費信息”按鈕后,程序的運行結果如圖6.2所示。

圖6.1 程序運行初始狀態界面圖

圖6.2 保存信息的界面圖

然后單擊工具欄中的結束按鈕,或者單擊運行窗口的關閉按鈕,結束程序的運行。

源程序解讀

(1)在Form_ Load()事件中,分別給各文本框賦初值。其中日期控件是根據Date函數獲得當前系統日期。

(2)當單擊“CmdSave”命令按鈕時,觸發CmdSave_ Click()事件。在該事件中,利用MsgBox函數顯示保存成功的提示信息。

(3)當單擊“CmdExit”命令按鈕時,觸發CmdExit_ Click()事件。在該事件中,利用Unload語句卸載當前窗體。

6.2 Time設置系統時間

在上一節中,介紹了日期函數中的 Date函數,這個函數的使用非常簡單,可以根據Date函數獲得的日期再利用Format函數按照一定的格式進行格式化。本節接著介紹另一種時間函數——Time函數的應用實例,即設置系統時間。

技術要點

在本實例中主要使用的技術是Time函數、IsDate函數和CDate函數,主要功能和用法如下:

● Time函數,主要用于返回當前系統時間。

● IsDate函數,主要用于判定表達式是否可以轉換為日期,函數的返回值是布爾類型。

● CDate函數,主要用于將其他類型的數據轉換為日期型。

Time函數的具體語法為:

        Time

IsDate函數的具體語法如下:

        IsDate(expression)

其中,參數expression就是用于判定的表達式,是一個可變型表達式,也可以是日期表達式或字符串表達式,并且字符串表達式可以看作是日期或時間。

CDate函數的具體語法為:

        CDate(expression)

其中,參數expression就是用于判定的表達式,是任何有效的數據類型。

實現代碼

        '重新設定時間事件
        Private Sub CmdSet_Click()
            If IsDate(TxtTime.Text)Then Time = CDate(TxtTime.Text)'Time語句設置系統時間
        End Sub
        '初始化時間文本框
        Private Sub Form_Load()
            TxtTime.MaxLength = 8                               '設置時間文本框的最大長度值
            TxtTime.Text = "HH:MM:SS"                       '設置時間文本框的初始內容
        End Sub
        '時間文本框中內容被改變時觸發的事件
        Private Sub TxtTime_Change()
            Dim i As Integer                                     '定義整型變量
            Dim st As String                                     '定義字符串變量
            i = Len(TxtTime.Text)                             '將時間文本框的內容長度賦值給變量i
            st = TxtTime.Text                                   '把時間文本框的內容賦值給變量st
            '重新設定時間的過程
            If i = 2 Then
                st = TxtTime.Text + Space$(1)                 '給變量st賦值
                Mid$(st,3,1)= ":"                        '在字符串中添加":"字符
                TxtTime.Text = st                               '給"TxtTime"文本框賦值st
                TxtTime.SelStart = Len(TxtTime.Text)          '給"TxtTime"文本框的SelStart
                                                                屬性賦值
            End If
            If i = 5 Then
                st = TxtTime.Text + " "                       '給變量st賦值
                Mid$(st,6,1)= ":"                        '在字符串中添加":"字符
                TxtTime.Text = st                               '給"TxtTime"文本框賦值st
                TxtTime.SelStart = Len(TxtTime.Text)          '給"TxtTime"文本框的SelStart
                                                                屬性賦值
            End If
        End Sub
        '單擊時間文本框時觸發的Click事件
        Private Sub TxtTime_Click()
            TxtTime.Text = ""                                 '置時間文本框為空
        End Sub
        '在時間文本框按任一鍵發生的事件
        Private Sub TxtTime_KeyPress(KeyAscii As Integer)
            If KeyAscii = vbKeyBack Then Exit Sub                '當單擊BACKSPACE鍵時,退出過程
            If KeyAscii > = vbKeyPageUp Then                    '當按下的鍵值大于33時的情況
                If KeyAscii< =vbKey9 And KeyAscii> =vbKey0 Then   '當按下的鍵在9鍵和0鍵之間的情況
                  Exit Sub                                  '退出過程
                Else
                  KeyAscii = 0                              '使鍵的Ascii值為0
                End If                                      '結束IF語句
            Else
                KeyAscii = 0                                '使鍵的Ascii值為0
            End If
        End Sub
        '計時器控件的Timer事件
        Private Sub Timer1_Timer()
            'Time函數返回當前系統時間
            LabShow.Caption = "現在是" + CStr(Time)     '顯示當前時間
        End Sub

單擊工具欄中的保存按鈕,保存工程,然后單擊工具欄中的啟動按鈕,運行工程,程序的運行結果如圖6.3所示。當單擊“重新設定時間”按鈕后,程序的運行結果如圖6.4所示。

圖6.3 程序運行初始狀態界面圖

圖6.4 重新設定時間后的界面圖

然后單擊工具欄中的結束按鈕,或者單擊運行窗口的關閉按鈕,結束程序的運行。

源程序解讀

(1)在Form_ Load()事件中,初始化“TxtTime”文本框。通過MaxLenth屬性設置文本框中能夠輸入的最大字符數目為8,同時設定文本框的內容為“HH:MM:SS”。

(2)當單擊“TxtTime”文本框時,就觸發文本框的Click事件。在該事件中,設置文本框的內容為空。當在文本框中按下任一鍵時,就觸發文本框的KeyPress事件。

(3)在TxtTime_ KeyPress(KeyAscii As Integer)事件中,主要是根據按下鍵的Ascii值做出判定。

(4)判定過程為:當按下BACKSPACE鍵時,退出過程。當按下的鍵值大于33,接著判斷是否在9鍵和0鍵之間。如果在兩者之間,退出過程;否則,置KeyAscii=0。如果按下的鍵值小于或等于33,同樣置KeyAscii=0。

(5)當改變“TxtTime”文本框中的內容時,就觸發文本框的Change事件。在該事件中,首先定義一個整型變量i和一個字符串變量st分別表示“TxtTime”文本框中內容的長度和內容。

(6)接下來,重新設定時間的過程:首先判斷i的大小是否等于2。如果等于,則令變量st為文本框的內容再加上一個空格,并運用Mid函數把st第三個位置的值設為冒號“:”。然后,把st的內容賦值給“TxtTime”文本框,并且設置文本的起始點位置為文本的長度,即文本內容的末尾。否則,如果i的值等于5,令變量st為文本框的內容再加上一個空格,并運用Mid函數把st第六個位置的值設為冒號“:”。然后,把st的內容賦值給“TxtTime”文本框,并且設置文本的起始點位置為文本的長度,即文本內容的末尾,設定時間的過程結束。

(7)當單擊“CmdSet”命令按鈕時,就觸發CmdSet的Click事件。在該事件中,要運用IsDate函數判斷“TxtTime”文本框中的內容是否是時間。如果是時間,則Time等于運用轉換函數CDate轉換TxtTime中內容后的值。

6.3 DateAdd計算加上一段時間后的時間

在前面兩節中分別介紹了表示返回系統日期的函數Date和返回系統時間的函數Time,這兩個函數都不涉及時間的計算。本節介紹一種對時間計算的函數——DateAdd的應用實例,即計算在一段時間上加上另一段時間的和。

技術要點

本實例中主要用到的技術是DateAdd函數,該函數用于在一個日期上加上一段時間間隔返回另外一個日期。具體語法為:

        DateAdd (interval,number,date)

其中各參數的含義如下:

●參數interval表示要加上的時間間隔,是字符串表達式。Interval的設置定值當Interval=“yyyy”時,表示年;當Interval=“q”時,表示季;當Interval=“m”時,表示月;當Interval=“y”時,表示一年的日數;當 Interval =“d”時,表示日;當 Interval =“w”時,表示一周的日數;當Interval=“ww”時,表示周;當Interval=“h”時,表示時;當Interval=“n”時,表示分鐘;當Interval=“s”時,表示秒。

●參數number表示要加上的時間間隔的數目,是數值表達式。當number的值為正數時,得到未來的日期;當number的值為負數時,得到過去的日期。

●參數date表示要加上一段時間的起始日期。

實現代碼

        Option Explicit
        '組合框的Click事件
        Private Sub CmbSDate_Click()
            On Error Resume Next                          '錯誤處理
            TxtStartD.Text = CDate(TxtStartD.Text)     '設定起始日期
            Select Case CmbSDate.ListIndex
                Case 0
                  '判定“TxtStartD”文本框中的內容是否能轉換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                      TxtStartD = Str$(Date)           '設定"TxtStartD"文本框中的內容為系統當前日期
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(2),TxtStartD.Text)
                  Else
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(2),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為2個月"        '顯示有效期
                Case 1
                  '判定"TxtStartD"文本框中的內容是否能轉換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設定"TxtStartD"文本框中的內容為系統當前
                                                        日期
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(3),TxtStartD.Text)
                  Else
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(3),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為3個月"        '顯示有效期
                Case 2
                  '判定"TxtStartD"文本框中的內容是否能轉換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設定"TxtStartD"文本框中的內容為系統當前
                                                        日期
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(4),TxtStartD.Text)
                  Else
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(4),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為4個月"        '顯示有效期
                Case 3
                  '判定"TxtStartD"文本框中的內容是否能轉換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設定"TxtStartD"文本框中的內容為系統當前
                                                        日期
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(5),TxtStartD.Text)
                  Else
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(5),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為5個月"        '顯示有效期
                Case 4
                  '判定"TxtStartD"文本框中的內容是否能轉換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設定"TxtStartD"文本框中的內容為系統當前
                                                        日期
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(6),TxtStartD.Text)
                  Else
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(6),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為6個月"        '顯示有效期
                Case 5
                  '判定"TxtStartD"文本框中的內容是否能轉換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                      TxtStartD = Str$(Date)             '設定"TxtStartD"文本框中的內容為系統當前
                                                        日期
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(7),TxtStartD.Text)
                  Else
                      '截止時間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(7),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為7個月"        '顯示有效期
            End Select
        End Sub
        '退出系統事件
        Private Sub CmdExit_Click()
            Unload Me                                        '卸載窗體
        End Sub
        '商品查詢事件
        Private Sub CmdFind_Click()
            MsgBox "查詢商品結束,謝謝!",vbOKOnly,"歡迎繼續查詢!" '提示信息
        End Sub
        '初始化,在文本框中添加有效期
        Private Sub Form_Load()
            CmbSDate.AddItem "2"                           '給組合框添加"2"
            CmbSDate.AddItem "3"                           '給組合框添加"3"
            CmbSDate.AddItem "4"                           '給組合框添加"4"
            CmbSDate.AddItem "5"                           '給組合框添加"5"
            CmbSDate.AddItem "6"                           '給組合框添加"6"
            CmbSDate.AddItem "7"                           '給組合框添加"7"
        End Sub

按Ctrl+S組合鍵,保存工程,然后按F5鍵,運行工程。當選擇組合框中的“2”選項時,程序的運行結果如圖6.5所示。當選擇組合框中的“3”選項時,程序的運行結果如圖6.6所示。

圖6.5 有效期為2個月的界面圖

圖6.6 有效期為3個月的界面圖

源程序解讀

(1)在Form_ Load()事件中,初始化“CmbSDate“組合框。運用AddItem方法分別添加有效期時間:2,3,4,5,6,7。當單擊“CmbSDate”組合框時,就觸發CmbSDate的Click事件。

(2)在CmbSDate_ Click()事件中,首先設定起始時間。然后運用Select Case語句,根據組合框CmbSDate的ListIndex屬性的值,分別計算商品的終止日期。

(3)計算過程為:首先判斷“TxtStartD”文本框中的內容是否可以轉換為日期型。如果不可以,則取當前系統的日期為txtStartD的內容。然后運用函數DateAdd計算終止時間,等于有效期加上起始日期。否則,直接運用函數 DateAdd 計算終止時間。最后,顯示有效期時間。

(4)當單擊“CmdFind”命令按鈕時,就觸發CmdFind_ Click()事件。在該事件中,利用MsgBox函數顯示“查詢商品結束”的提示信息。

(5)當單擊“CmdExit”命令按鈕時,就觸發CmdExit_ Click()事件。在該事件中,利用Unload語句卸載當前窗體。

6.4 DateDiff函數計算時間

在上一節中介紹了對時間有計算功能的DateAdd函數,從函數的構成可以看出,該函數對時間進行加操作。本節介紹另外一種對時間有計算功能的函數——DateDiff的應用實例,即計算開始日期和終止日期之間的間隔天數。

技術要點

本實例運用的主要技術是 DateDiff函數、MSFlexGrid控件及其 Rows屬性、Cols屬性、TextMatrix屬性和ColWidth屬性,主要功能和用法如下:

●DateDiff函數,主要用于計算兩個指定日期之間的間隔數目,函數的返回值是可變型或長整型。

● MSFlexGrid控件,跟DBGrid控件的作用很相似,主要用于在表格中顯示數據組。

● Rows屬性,主要用于設定控件的總行數。

● Cols屬性,主要用于設定控件的總列數。

● TextMatrix屬性主要用來返回或設置二維數組中的內容。

DateDiff函數的具體語法為:

        DateDiff(interval,date1,date2[,firstdayofweek[,firstweekofyear]])

其中各參數的含義如下:

●參數interval表示用來計算date1和date2的時間差的時間間隔,是字符串表達式。

●參數date1和date2表示計算中用到的兩個日期,如果date1的值小于date2的值,函數的返回值為負值;

●參數firstdayofweek表示一星期的第一天,是常數。如果省略,則默認為星期日為第一天。

●參數firstweekofyear表示一年的第一周,是常數。如果省略,則默認為包含1月1日的星期為第一周。

TextMatrix屬性的具體語法格式為:

        Property TextMatrix(Row As Long,Col As Long)As String

ColWidth屬性決定表格中特定列的寬度。

實現代碼

        Option Explicit
        Private Sub Form_Load()
            Dim ADate()As Variant                           '定義可變類型數組變量
            Dim i As Integer                                  '定義整型變量
            'Array對動態數組賦值
            ADate = Array("2008-01-01","2008 -02 -01","2008 -03 -01","2008 -04 -01","2008 -05 -
        01","2008-06-01","2008-07-01","2008-08-01","2008-09-01")
            ReDim Preserve ADate(8)                         'ReDim加Preserve改變數組的大小,保留原內容
            With MSFlexGrid1
                .Rows = 10                                   '設置 控件MSHFlexGrid 中的總行數
                .Cols = 4                                    '設置控件 MSHFlexGrid 中的總列數
                .TextMatrix(0,0)= "2008年"              'TextMatrix設置控件MSHFlexGrid中的表頭
                .TextMatrix(0,1)= "  開始日期"          'TextMatrix設置控件MSHFlexGrid中的表頭
                .TextMatrix(0,2)= "  結束日期"          'TextMatrix設置控件MSHFlexGrid中的表頭
                .TextMatrix(0,3)= "  天數"              'TextMatrix設置控件MSHFlexGrid中的表頭
                For i = 0 To 8
                  .TextMatrix(i+1,0)=Int(Mid$(ADate(i),6,2))&"月"       '從數組元素中提取月份
                  .TextMatrix(i + 1,1)= ADate(i)                                '數組中元素作為開始日期
                  .TextMatrix(i+1,2)=DateAdd("m",1,ADate(i))-1            '結束日期只到月底
                  . TextMatrix(i + 1,3)= DateDiff("d",.TextMatrix(i + 1,1),DateAdd("m",1,ADate(i)))
                  .ColWidth(1)= 1400        'ColWidth以緹為單位,設置指定帶區中的列寬
                  .ColWidth(2)= 1400        'ColWidth以緹為單位,設置指定帶區中的列寬
                Next i
            End With
        End Sub

按Ctrl+S組合鍵,保存工程,然后按F5鍵,運行工程。當單擊啟動按鈕后,程序的運行結果如圖6.7所示。

圖6.7 程序運行結果圖

源程序解讀

(1)在Form_ Load()事件中,首先定義一個可變型動態數組變量Adate()和一個整型變量i,作用分別是存儲開始日期和循環變量。然后給動態數組賦初值,并重新定義數組。

(2)接下來,就是通過對控件MSFlexGrid的操作計算出終止日期和間隔時間。

(3)操作過程為:首先運用With語句,并根據控件MSFlexGrid的Rows屬性和Cols屬性分別設置控件中的總行數和總列數。然后,由二維數組TextMatrix設置MSFlexGrid中表頭的內容,分別為:“2008年”、“開始日期”、“結束日期”和“天數”。最后,運用For循環語句依次進行從數組Adate中提取月份、顯示開始日期、計算結束日期和計算間隔天數的操作。

6.5 Now日期時間示例

在前面小節中分別介紹了返回系統時間的兩個函數Date和Time,以及兩個設計時間計算的函數DateAdd和DateDiff。本節介紹另外一種指定系統日期和時間的函數——Now的應用實例,即以不同的時間格式顯示系統當前時間。

技術要點

本實例中主要運用的技術是Now函數,該函數主要用于返回系統的日期和時間。具體語法為:

        Now

Now函數與Date函數和Time函數的主要區別是:Now函數返回當前系統的日期和時間;Date函數只返回當前系統的日期,即年月日;Time函數只返回當前系統的時間,即時分秒。

實現代碼

        Option Explicit
        Private Sub CmbType_Click()
            Select Case CmbType.ListIndex
                Case 0
                  Label1(0).Visible = True                  '使得第1個標簽可見
                  Label1(1).Visible = False                 '使得第2個標簽不可見
                  Label1(2).Visible = False                 '使得第3個標簽不可見
                  Label1(3).Visible = False                 '使得第4個標簽不可見
                Case 1
                  Label1(0).Visible = False                 '使得第1個標簽不可見
                  Label1(1).Visible = True                  '使得第2個標簽可見
                  Label1(2).Visible = False                 '使得第3個標簽不可見
                  Label1(3).Visible = False                 '使得第4個標簽不可見
                Case 2
                  Label1(0).Visible = False                 '使得第1個標簽不可見
                  Label1(1).Visible = False                     '使得第2個標簽不可見
                  Label1(2).Visible = True                      '使得第3個標簽可見
                  Label1(3).Visible = False                     '使得第4個標簽不可見
                Case 3
                  Label1(0).Visible = False                     '使得第1個標簽不可見
                  Label1(1).Visible = False                     '使得第2個標簽不可見
                  Label1(2).Visible = False                     '使得第3個標簽不可見
                  Label1(3).Visible = True                      '使得第4個標簽可見
            End Select
        End Sub
        '初始狀態,在組合框中添加顯示時間格式
        Private Sub Form_Load()
            CmbType.AddItem "短時間格式"                        '給組合框添加"短時間格式"
            CmbType.AddItem "長時間格式"                        '給組合框添加"長時間格式"
            CmbType.AddItem "時分秒的時間格式"                  '給組合框添加"時分秒的時間格式"
            CmbType.AddItem "Now函數返回時間"                   '給組合框添加"Now函數返回時間"
        End Sub
        'Timer控件的Timer事件
        Private Sub Timer1_Timer()
            '顯示系統時間
            Label1(0).Caption = Format$(Date,"Short Date")  '以系統設置的短時間格式返回當前系統時間
            Label1(1).Caption = Format$(Date,"Long Date")  '以系統設置的長時間格式返回當前系統時間
            Label1(2).Caption = Format$(Now,"hh:mm:ss")  '以時分秒時間格式返回Now函數得到的系統當前的日
                                                                  期與時間
            Label1(3).Caption = Now                             'Now函數返回系統當前的日期與時間
        End Sub

按Ctrl+S組合鍵,保存工程,然后按F5鍵,運行工程。當單擊啟動按鈕后,程序的運行結果如圖6.8所示。當選擇組合框中的“短時間格式”選項時,程序的運行結果如圖6.9所示。當選擇組合框中的“時分秒的時間格式”選項時,程序的運行結果如圖6.10所示。當選擇組合框中的“Now函數返回時間”選項時,程序的運行結果如圖6.11所示。

圖6.8 程序運行初始狀態的界面圖

圖6.9 顯示短時間格式的界面圖

圖6.10 顯示時分秒的時間格式的界面圖

圖6.11 Now函數返回時間的界面圖

源程序解讀

(1)在Timer控件的Timer事件中,分別給標簽控件數組賦值為時間的各種顯示格式。分別為:以系統設置的短時間格式返回當前系統時間、以系統設置的長時間格式返回當前系統時間、以時分秒時間格式返回Now函數得到的系統當前的日期與時間、Now函數返回系統當前的日期與時間。

(2)在Form_ Load()事件中,初始化“CmbType”組合框。添加顯示時間的格式,分別為:短時間格式、長時間格式、時分秒時間格式、Now函數返回時間。

(3)當單擊“CmbType”組合框時,觸發CmbType_ Click()事件。

(4)在CmbType_ Click()事件中,運用Select Case語句,根據CmbType的ListIndex屬性顯示時間的格式。當ListIndex的值為0時,使得Label(0)可見,數組控件中的其他元素均不可見。當ListIndex的值為1時,使得Label(1)可見,數組控件中的其他元素均不可見。當ListIndex的值為2時,使得Label(2)可見,數組控件中的其他元素均不可見。當ListIndex的值為3時,使得Label(3)可見,數組控件中的其他元素均不可見。

說明:除了以上介紹的返回系統時間的函數外,還有Hour函數,返回當前系統時間的小時分量;Minute函數,返回當前系統時間的分鐘分量;Day函數,返回當前系統日期的天數分量。

6.6 DatePart計算當前時間所屬的季、日、周

在前面小節中分別介紹了返回當前系統時間的函數和與計算時間的函數,在上節的結束部分提到對時間部分返回的函數。本節介紹另外一種分割返回時間的函數——DatePart的應用實例,即計算當前時間所屬哪一年的季、日、周。

技術要點

在本實例中主要使用的技術是 DatePart函數和日歷控件 Calendar,主要功能和用法如下:

● DatePart函數,主要用于從已知日期或時間中分離出指定的部分。

●日歷控件Calendar,主要用于顯示時間的控件,由其Value屬性傳遞時間的值。

DatePart函數的具體語法為:

        DatePart (interval,date[,firstdayofweek[,firstweekofyear]])

其中各參數的含義與前面介紹的函數DateDiff中的參數含義除了Date之外都一樣,這里的Date參數表示要計算的日期或時間值。

實現代碼

        Option Explicit
        Dim Str As String                                            '定義一個字符串變量
        Private Sub Form_Load()
            Calendar1.Value = Date                                  '日歷控件的值為當前系統日期
            'DatePart 函數可以用來計算日期并返回指定的時間間隔
            Str = DatePart("q",Date)                           '獲得日期中的季分量
            TxtH.Text = DatePart("h",Time)                     '獲得時間中的小時分量
            TxtM.Text = DatePart("n",Time)                     '獲得時間中的分鐘分量
            TxtS.Text = DatePart("s",Time)                     '獲得時間中的秒分量
            PDJJ (Str)                                            '調用PDJJ過程
        End Sub
        '日歷控件的Click事件
        Private Sub Calendar1_Click()
            Str = DatePart("q",Calendar1.Value)                '獲得日歷值中的季分量
            PDJJ (Str)                                            '調用PDJJ過程
        End Sub
        Private Sub PDJJ(ByVal Str As Integer)
            Select Case Str
                Case 1
                  TxtShowJ.Text = "春季"                          '顯示季節
                Case 2
                  TxtShowJ.Text = "夏季"                          '顯示季節
                Case 3
                  TxtShowJ.Text = "秋季"                          '顯示季節
                Case 4
                  TxtShowJ.Text = "冬季"                          '顯示季節
            End Select
            TxtDay.Text = DatePart("y",Calendar1.Value)        '獲得日歷值中的天分量
            TxtWeek.Text = DatePart("ww",Calendar1.Value)      '獲得日歷值中的周分量
        End Sub

單擊工具欄中的保存按鈕,保存工程,然后單擊工具欄中的啟動按鈕,運行工程。當選擇2008年二月時,程序的運行結果如圖6.12所示。當選擇2008年五月時,程序的運行結果如圖6.13所示。

圖6.12 春季運行界面圖

圖6.13 夏季運行界面圖

然后單擊工具欄中的結束按鈕,或者單擊運行窗口的關閉按鈕,結束程序的運行。

源程序解讀

(1)代碼首先定義了一個字符串變量Str,用來存儲從日期中分離出來的分量。

(2)在Form_ Load()事件中,首先運用函數Date獲得當前系統日期,并賦值給“Calendar1”日歷控件。然后,由DatePart函數從日期中分離出季分量,并賦值給變量Str。由Time函數獲得當前系統的時間。由DatePart函數分別從時間中分離出小時、分鐘、秒,再依次賦值給文本框TxtH、TxtM、TxtS,并顯示結果。最后調用自定義過程PDJJ,并以Str為實在傳遞參數。

(3)在自定義過程PDJJ(ByVal Str As Integer)中,運用Select Case語句,并根據傳遞的Str的值,判斷是什么季節。如果Str=1,表示是春季。如果Str=2,表示是夏季。如果Str=3,表示是秋季。如果Str=4,表示是冬季。然后,由函數DatePart分別從日歷值中分離出天數分量和周數分量,再分別由文本框TxtDay和文本框TxtWeek顯示出來。

(4)當單擊“Calendar1”日歷控件時,就觸發該控件的Click事件。在Calendar1_ Click()事件中,首先由函數DatePart分別從日歷值中分離出季分量。然后調用自定義過程PDJJ,并以Str為實在傳遞參數,之后的執行過程同(3)。

主站蜘蛛池模板: 大化| 宜川县| 黄陵县| 舞钢市| 毕节市| 郎溪县| 太康县| 梁平县| 清水县| 洛隆县| 盐山县| 澄江县| 阿城市| 濮阳县| 灵宝市| 芦溪县| 仪征市| 沧州市| 贡觉县| 安达市| 铁力市| 玉门市| 龙州县| 德阳市| 如皋市| 渑池县| 南川市| 清水河县| 沙湾县| 新乡市| 什邡市| 大理市| 郑州市| 祁连县| 蛟河市| 申扎县| 五寨县| 潜山县| 高密市| 陆良县| 建昌县|