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

第6章 日期函數(shù)

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

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

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

技術(shù)要點

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

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

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

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

        Date

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

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

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

圖6.2 保存信息的界面圖

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

源程序解讀

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

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

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

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

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

技術(shù)要點

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

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

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

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

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

        Time

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

        IsDate(expression)

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

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

        CDate(expression)

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

實現(xiàn)代碼

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

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

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

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

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

源程序解讀

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

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

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

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

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

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

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

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

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

技術(shù)要點

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

        DateAdd (interval,number,date)

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

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

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

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

實現(xiàn)代碼

        Option Explicit
        '組合框的Click事件
        Private Sub CmbSDate_Click()
            On Error Resume Next                          '錯誤處理
            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)前日期
                      '截止時間等于有效期加上起始日期
                      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"文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前
                                                        日期
                      '截止時間等于有效期加上起始日期
                      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"文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前
                                                        日期
                      '截止時間等于有效期加上起始日期
                      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"文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前
                                                        日期
                      '截止時間等于有效期加上起始日期
                      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"文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                       TxtStartD = Str$(Date)             '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前
                                                        日期
                      '截止時間等于有效期加上起始日期
                      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"文本框中的內(nèi)容是否能轉(zhuǎn)換成日期型的情況
                  If IsDate(TxtStartD.Text)= False Then
                      TxtStartD = Str$(Date)             '設(shè)定"TxtStartD"文本框中的內(nèi)容為系統(tǒng)當(dāng)前
                                                        日期
                      '截止時間等于有效期加上起始日期
                      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
        '退出系統(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鍵,運行工程。當(dāng)選擇組合框中的“2”選項時,程序的運行結(jié)果如圖6.5所示。當(dāng)選擇組合框中的“3”選項時,程序的運行結(jié)果如圖6.6所示。

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

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

源程序解讀

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

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

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

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

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

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

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

技術(shù)要點

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

●DateDiff函數(shù),主要用于計算兩個指定日期之間的間隔數(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表示用來計算date1和date2的時間差的時間間隔,是字符串表達(dá)式。

●參數(shù)date1和date2表示計算中用到的兩個日期,如果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屬性決定表格中特定列的寬度。

實現(xiàn)代碼

        Option Explicit
        Private Sub Form_Load()
            Dim ADate()As Variant                           '定義可變類型數(shù)組變量
            Dim i As Integer                                  '定義整型變量
            'Array對動態(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鍵,運行工程。當(dāng)單擊啟動按鈕后,程序的運行結(jié)果如圖6.7所示。

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

源程序解讀

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

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

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

6.5 Now日期時間示例

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

技術(shù)要點

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

        Now

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

實現(xiàn)代碼

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

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

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

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

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

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

源程序解讀

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

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

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

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

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

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

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

技術(shù)要點

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

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

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

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

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

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

實現(xiàn)代碼

        Option Explicit
        Dim Str As String                                            '定義一個字符串變量
        Private Sub Form_Load()
            Calendar1.Value = Date                                  '日歷控件的值為當(dāng)前系統(tǒng)日期
            'DatePart 函數(shù)可以用來計算日期并返回指定的時間間隔
            Str = DatePart("q",Date)                           '獲得日期中的季分量
            TxtH.Text = DatePart("h",Time)                     '獲得時間中的小時分量
            TxtM.Text = DatePart("n",Time)                     '獲得時間中的分鐘分量
            TxtS.Text = DatePart("s",Time)                     '獲得時間中的秒分量
            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)選擇2008年二月時,程序的運行結(jié)果如圖6.12所示。當(dāng)選擇2008年五月時,程序的運行結(jié)果如圖6.13所示。

圖6.12 春季運行界面圖

圖6.13 夏季運行界面圖

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

源程序解讀

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

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

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

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

主站蜘蛛池模板: 南木林县| 偃师市| 云霄县| 韶关市| 任丘市| 石门县| 黔东| 衢州市| 双流县| 宽城| 蓬莱市| 平顶山市| 云安县| 深圳市| 崇左市| 察雅县| 岫岩| 汶川县| 剑川县| 保山市| 襄汾县| 东光县| 泽州县| 尼玛县| 时尚| 太白县| 潼南县| 溧阳市| 元氏县| 都昌县| 宁化县| 图木舒克市| 南投县| 叙永县| 垣曲县| 东莞市| 涿鹿县| 田东县| 依兰县| 上饶县| 仁寿县|