Visual Basic实例精通
上QQ阅读APP看书,第一时间看更新

第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)。