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

第6章 日期函數(shù)

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

6.1 Data返回系統(tǒng)當(dāng)前的日期

在VB中,日期函數(shù)有許多種,例如,Date函數(shù),Time函數(shù),Hour函數(shù)等。本章的開始首先介紹最簡(jiǎn)單的日期函數(shù)——Data,這個(gè)函數(shù)返回系統(tǒng)當(dāng)前的日期。

技術(shù)要點(diǎn)

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

● Date函數(shù),主要返回包含系統(tǒng)日期的可變型日期。

●日期控件DTPicker,主要用于顯示時(shí)間,設(shè)定時(shí)間使用控件的Value屬性進(jìn)行。

Date函數(shù)的具體語法為:

        Date

實(shí)現(xiàn)代碼

        '退出系統(tǒng)命令
        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 = "計(jì)算機(jī)學(xué)院"            '給"TxtAcademy"文本框賦值為"計(jì)算機(jī)學(xué)院"
            TxtSpec.Text = "計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)"     '給"TxtSpec"文本框賦值為"計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)"
            TxtAddress.Text = "黑龍江省哈爾濱市"      '給"TxtAddress"文本框賦值為"黑龍江省哈爾濱市"
            DTPicker1.Value = Date                      'Date返回系統(tǒng)日期
            TxtRemark.Text = "無"                     '給"TxtRemark"文本框賦值為"無"
        End Sub

單擊工具欄中的保存按鈕,保存工程,然后單擊工具欄中的啟動(dòng)按鈕,運(yùn)行工程,程序的運(yùn)行結(jié)果如圖6.1所示。當(dāng)單擊“保存繳費(fèi)信息”按鈕后,程序的運(yùn)行結(jié)果如圖6.2所示。

圖6.1 程序運(yùn)行初始狀態(tài)界面圖

圖6.2 保存信息的界面圖

然后單擊工具欄中的結(jié)束按鈕,或者單擊運(yùn)行窗口的關(guān)閉按鈕,結(jié)束程序的運(yùn)行。

源程序解讀

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

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

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

6.2 Time設(shè)置系統(tǒng)時(shí)間

在上一節(jié)中,介紹了日期函數(shù)中的 Date函數(shù),這個(gè)函數(shù)的使用非常簡(jiǎn)單,可以根據(jù)Date函數(shù)獲得的日期再利用Format函數(shù)按照一定的格式進(jìn)行格式化。本節(jié)接著介紹另一種時(shí)間函數(shù)——Time函數(shù)的應(yīng)用實(shí)例,即設(shè)置系統(tǒng)時(shí)間。

技術(shù)要點(diǎn)

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

● Time函數(shù),主要用于返回當(dāng)前系統(tǒng)時(shí)間。

● IsDate函數(shù),主要用于判定表達(dá)式是否可以轉(zhuǎn)換為日期,函數(shù)的返回值是布爾類型。

● CDate函數(shù),主要用于將其他類型的數(shù)據(jù)轉(zhuǎn)換為日期型。

Time函數(shù)的具體語法為:

        Time

IsDate函數(shù)的具體語法如下:

        IsDate(expression)

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

CDate函數(shù)的具體語法為:

        CDate(expression)

其中,參數(shù)expression就是用于判定的表達(dá)式,是任何有效的數(shù)據(jù)類型。

實(shí)現(xiàn)代碼

        '重新設(shè)定時(shí)間事件
        Private Sub CmdSet_Click()
            If IsDate(TxtTime.Text)Then Time = CDate(TxtTime.Text)'Time語句設(shè)置系統(tǒng)時(shí)間
        End Sub
        '初始化時(shí)間文本框
        Private Sub Form_Load()
            TxtTime.MaxLength = 8                               '設(shè)置時(shí)間文本框的最大長度值
            TxtTime.Text = "HH:MM:SS"                       '設(shè)置時(shí)間文本框的初始內(nèi)容
        End Sub
        '時(shí)間文本框中內(nèi)容被改變時(shí)觸發(fā)的事件
        Private Sub TxtTime_Change()
            Dim i As Integer                                     '定義整型變量
            Dim st As String                                     '定義字符串變量
            i = Len(TxtTime.Text)                             '將時(shí)間文本框的內(nèi)容長度賦值給變量i
            st = TxtTime.Text                                   '把時(shí)間文本框的內(nèi)容賦值給變量st
            '重新設(shè)定時(shí)間的過程
            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
        '單擊時(shí)間文本框時(shí)觸發(fā)的Click事件
        Private Sub TxtTime_Click()
            TxtTime.Text = ""                                 '置時(shí)間文本框?yàn)榭?
        End Sub
        '在時(shí)間文本框按任一鍵發(fā)生的事件
        Private Sub TxtTime_KeyPress(KeyAscii As Integer)
            If KeyAscii = vbKeyBack Then Exit Sub                '當(dāng)單擊BACKSPACE鍵時(shí),退出過程
            If KeyAscii > = vbKeyPageUp Then                    '當(dāng)按下的鍵值大于33時(shí)的情況
                If KeyAscii< =vbKey9 And KeyAscii> =vbKey0 Then   '當(dāng)按下的鍵在9鍵和0鍵之間的情況
                  Exit Sub                                  '退出過程
                Else
                  KeyAscii = 0                              '使鍵的Ascii值為0
                End If                                      '結(jié)束IF語句
            Else
                KeyAscii = 0                                '使鍵的Ascii值為0
            End If
        End Sub
        '計(jì)時(shí)器控件的Timer事件
        Private Sub Timer1_Timer()
            'Time函數(shù)返回當(dāng)前系統(tǒng)時(shí)間
            LabShow.Caption = "現(xiàn)在是" + CStr(Time)     '顯示當(dāng)前時(shí)間
        End Sub

單擊工具欄中的保存按鈕,保存工程,然后單擊工具欄中的啟動(dòng)按鈕,運(yùn)行工程,程序的運(yùn)行結(jié)果如圖6.3所示。當(dāng)單擊“重新設(shè)定時(shí)間”按鈕后,程序的運(yùn)行結(jié)果如圖6.4所示。

圖6.3 程序運(yùn)行初始狀態(tài)界面圖

圖6.4 重新設(shè)定時(shí)間后的界面圖

然后單擊工具欄中的結(jié)束按鈕,或者單擊運(yùn)行窗口的關(guān)閉按鈕,結(jié)束程序的運(yùn)行。

源程序解讀

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

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

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

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

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

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

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

6.3 DateAdd計(jì)算加上一段時(shí)間后的時(shí)間

在前面兩節(jié)中分別介紹了表示返回系統(tǒng)日期的函數(shù)Date和返回系統(tǒng)時(shí)間的函數(shù)Time,這兩個(gè)函數(shù)都不涉及時(shí)間的計(jì)算。本節(jié)介紹一種對(duì)時(shí)間計(jì)算的函數(shù)——DateAdd的應(yīng)用實(shí)例,即計(jì)算在一段時(shí)間上加上另一段時(shí)間的和。

技術(shù)要點(diǎn)

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

        DateAdd (interval,number,date)

其中各參數(shù)的含義如下:

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

●參數(shù)number表示要加上的時(shí)間間隔的數(shù)目,是數(shù)值表達(dá)式。當(dāng)number的值為正數(shù)時(shí),得到未來的日期;當(dāng)number的值為負(fù)數(shù)時(shí),得到過去的日期。

●參數(shù)date表示要加上一段時(shí)間的起始日期。

實(shí)現(xiàn)代碼

        Option Explicit
        '組合框的Click事件
        Private Sub CmbSDate_Click()
            On Error Resume Next                          '錯(cuò)誤處理
            TxtStartD.Text = CDate(TxtStartD.Text)     '設(shè)定起始日期
            Select Case CmbSDate.ListIndex
                Case 0
                  '判定“TxtStartD”文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                      TxtStartD = Str$(Date)           '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前日期
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(2),TxtStartD.Text)
                  Else
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(2),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為2個(gè)月"        '顯示有效期
                Case 1
                  '判定"TxtStartD"文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前
                                                        日期
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(3),TxtStartD.Text)
                  Else
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(3),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為3個(gè)月"        '顯示有效期
                Case 2
                  '判定"TxtStartD"文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前
                                                        日期
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(4),TxtStartD.Text)
                  Else
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(4),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為4個(gè)月"        '顯示有效期
                Case 3
                  '判定"TxtStartD"文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前
                                                        日期
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(5),TxtStartD.Text)
                  Else
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(5),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為5個(gè)月"        '顯示有效期
                Case 4
                  '判定"TxtStartD"文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前
                                                        日期
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(6),TxtStartD.Text)
                  Else
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(6),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為6個(gè)月"        '顯示有效期
                Case 5
                  '判定"TxtStartD"文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                      TxtStartD = Str$(Date)             '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前
                                                        日期
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(7),TxtStartD.Text)
                  Else
                      '截止時(shí)間等于有效期加上起始日期
                      TxtEndD.Text = DateAdd("m",Val(7),TxtStartD.Text)
                  End If
                  LabShow.Caption = "有效期為7個(gè)月"        '顯示有效期
            End Select
        End Sub
        '退出系統(tǒng)事件
        Private Sub CmdExit_Click()
            Unload Me                                        '卸載窗體
        End Sub
        '商品查詢事件
        Private Sub CmdFind_Click()
            MsgBox "查詢商品結(jié)束,謝謝!",vbOKOnly,"歡迎繼續(xù)查詢!" '提示信息
        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鍵,運(yùn)行工程。當(dāng)選擇組合框中的“2”選項(xiàng)時(shí),程序的運(yùn)行結(jié)果如圖6.5所示。當(dāng)選擇組合框中的“3”選項(xiàng)時(shí),程序的運(yùn)行結(jié)果如圖6.6所示。

圖6.5 有效期為2個(gè)月的界面圖

圖6.6 有效期為3個(gè)月的界面圖

源程序解讀

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

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

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

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

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

6.4 DateDiff函數(shù)計(jì)算時(shí)間

在上一節(jié)中介紹了對(duì)時(shí)間有計(jì)算功能的DateAdd函數(shù),從函數(shù)的構(gòu)成可以看出,該函數(shù)對(duì)時(shí)間進(jìn)行加操作。本節(jié)介紹另外一種對(duì)時(shí)間有計(jì)算功能的函數(shù)——DateDiff的應(yīng)用實(shí)例,即計(jì)算開始日期和終止日期之間的間隔天數(shù)。

技術(shù)要點(diǎn)

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

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

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

● Rows屬性,主要用于設(shè)定控件的總行數(shù)。

● Cols屬性,主要用于設(shè)定控件的總列數(shù)。

● TextMatrix屬性主要用來返回或設(shè)置二維數(shù)組中的內(nèi)容。

DateDiff函數(shù)的具體語法為:

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

其中各參數(shù)的含義如下:

●參數(shù)interval表示用來計(jì)算date1和date2的時(shí)間差的時(shí)間間隔,是字符串表達(dá)式。

●參數(shù)date1和date2表示計(jì)算中用到的兩個(gè)日期,如果date1的值小于date2的值,函數(shù)的返回值為負(fù)值;

●參數(shù)firstdayofweek表示一星期的第一天,是常數(shù)。如果省略,則默認(rèn)為星期日為第一天。

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

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

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

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

實(shí)現(xiàn)代碼

        Option Explicit
        Private Sub Form_Load()
            Dim ADate()As Variant                           '定義可變類型數(shù)組變量
            Dim i As Integer                                  '定義整型變量
            'Array對(duì)動(dòng)態(tài)數(shù)組賦值
            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改變數(shù)組的大小,保留原內(nèi)容
            With MSFlexGrid1
                .Rows = 10                                   '設(shè)置 控件MSHFlexGrid 中的總行數(shù)
                .Cols = 4                                    '設(shè)置控件 MSHFlexGrid 中的總列數(shù)
                .TextMatrix(0,0)= "2008年"              'TextMatrix設(shè)置控件MSHFlexGrid中的表頭
                .TextMatrix(0,1)= "  開始日期"          'TextMatrix設(shè)置控件MSHFlexGrid中的表頭
                .TextMatrix(0,2)= "  結(jié)束日期"          'TextMatrix設(shè)置控件MSHFlexGrid中的表頭
                .TextMatrix(0,3)= "  天數(shù)"              'TextMatrix設(shè)置控件MSHFlexGrid中的表頭
                For i = 0 To 8
                  .TextMatrix(i+1,0)=Int(Mid$(ADate(i),6,2))&"月"       '從數(shù)組元素中提取月份
                  .TextMatrix(i + 1,1)= ADate(i)                                '數(shù)組中元素作為開始日期
                  .TextMatrix(i+1,2)=DateAdd("m",1,ADate(i))-1            '結(jié)束日期只到月底
                  . TextMatrix(i + 1,3)= DateDiff("d",.TextMatrix(i + 1,1),DateAdd("m",1,ADate(i)))
                  .ColWidth(1)= 1400        'ColWidth以緹為單位,設(shè)置指定帶區(qū)中的列寬
                  .ColWidth(2)= 1400        'ColWidth以緹為單位,設(shè)置指定帶區(qū)中的列寬
                Next i
            End With
        End Sub

按Ctrl+S組合鍵,保存工程,然后按F5鍵,運(yùn)行工程。當(dāng)單擊啟動(dòng)按鈕后,程序的運(yùn)行結(jié)果如圖6.7所示。

圖6.7 程序運(yùn)行結(jié)果圖

源程序解讀

(1)在Form_ Load()事件中,首先定義一個(gè)可變型動(dòng)態(tài)數(shù)組變量Adate()和一個(gè)整型變量i,作用分別是存儲(chǔ)開始日期和循環(huán)變量。然后給動(dòng)態(tài)數(shù)組賦初值,并重新定義數(shù)組。

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

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

6.5 Now日期時(shí)間示例

在前面小節(jié)中分別介紹了返回系統(tǒng)時(shí)間的兩個(gè)函數(shù)Date和Time,以及兩個(gè)設(shè)計(jì)時(shí)間計(jì)算的函數(shù)DateAdd和DateDiff。本節(jié)介紹另外一種指定系統(tǒng)日期和時(shí)間的函數(shù)——Now的應(yīng)用實(shí)例,即以不同的時(shí)間格式顯示系統(tǒng)當(dāng)前時(shí)間。

技術(shù)要點(diǎn)

本實(shí)例中主要運(yùn)用的技術(shù)是Now函數(shù),該函數(shù)主要用于返回系統(tǒng)的日期和時(shí)間。具體語法為:

        Now

Now函數(shù)與Date函數(shù)和Time函數(shù)的主要區(qū)別是:Now函數(shù)返回當(dāng)前系統(tǒng)的日期和時(shí)間;Date函數(shù)只返回當(dāng)前系統(tǒng)的日期,即年月日;Time函數(shù)只返回當(dāng)前系統(tǒng)的時(shí)間,即時(shí)分秒。

實(shí)現(xiàn)代碼

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

按Ctrl+S組合鍵,保存工程,然后按F5鍵,運(yùn)行工程。當(dāng)單擊啟動(dòng)按鈕后,程序的運(yùn)行結(jié)果如圖6.8所示。當(dāng)選擇組合框中的“短時(shí)間格式”選項(xiàng)時(shí),程序的運(yùn)行結(jié)果如圖6.9所示。當(dāng)選擇組合框中的“時(shí)分秒的時(shí)間格式”選項(xiàng)時(shí),程序的運(yùn)行結(jié)果如圖6.10所示。當(dāng)選擇組合框中的“Now函數(shù)返回時(shí)間”選項(xiàng)時(shí),程序的運(yùn)行結(jié)果如圖6.11所示。

圖6.8 程序運(yùn)行初始狀態(tài)的界面圖

圖6.9 顯示短時(shí)間格式的界面圖

圖6.10 顯示時(shí)分秒的時(shí)間格式的界面圖

圖6.11 Now函數(shù)返回時(shí)間的界面圖

源程序解讀

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

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

(3)當(dāng)單擊“CmbType”組合框時(shí),觸發(fā)CmbType_ Click()事件。

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

說明:除了以上介紹的返回系統(tǒng)時(shí)間的函數(shù)外,還有Hour函數(shù),返回當(dāng)前系統(tǒng)時(shí)間的小時(shí)分量;Minute函數(shù),返回當(dāng)前系統(tǒng)時(shí)間的分鐘分量;Day函數(shù),返回當(dāng)前系統(tǒng)日期的天數(shù)分量。

6.6 DatePart計(jì)算當(dāng)前時(shí)間所屬的季、日、周

在前面小節(jié)中分別介紹了返回當(dāng)前系統(tǒng)時(shí)間的函數(shù)和與計(jì)算時(shí)間的函數(shù),在上節(jié)的結(jié)束部分提到對(duì)時(shí)間部分返回的函數(shù)。本節(jié)介紹另外一種分割返回時(shí)間的函數(shù)——DatePart的應(yīng)用實(shí)例,即計(jì)算當(dāng)前時(shí)間所屬哪一年的季、日、周。

技術(shù)要點(diǎn)

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

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

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

DatePart函數(shù)的具體語法為:

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

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

實(shí)現(xiàn)代碼

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

單擊工具欄中的保存按鈕,保存工程,然后單擊工具欄中的啟動(dòng)按鈕,運(yùn)行工程。當(dāng)選擇2008年二月時(shí),程序的運(yùn)行結(jié)果如圖6.12所示。當(dāng)選擇2008年五月時(shí),程序的運(yùn)行結(jié)果如圖6.13所示。

圖6.12 春季運(yùn)行界面圖

圖6.13 夏季運(yùn)行界面圖

然后單擊工具欄中的結(jié)束按鈕,或者單擊運(yùn)行窗口的關(guān)閉按鈕,結(jié)束程序的運(yùn)行。

源程序解讀

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

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

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

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

主站蜘蛛池模板: 荥阳市| 阳春市| 和政县| 衡山县| 红桥区| 晋州市| 北川| 康保县| 庆安县| 富裕县| 古交市| 凤台县| 兴山县| 连江县| 胶州市| 朝阳县| 建湖县| 古田县| 柘荣县| 吉木萨尔县| 家居| 景谷| 安陆市| 房产| 巫溪县| 铜陵市| 会东县| 英超| 高邮市| 丘北县| 枝江市| 龙胜| 海阳市| 特克斯县| 合江县| 涿州市| 灵山县| 杭锦后旗| 普定县| 建昌县| 南和县|