作者: 阿虎 | 日期: 2004-05-18 | 已阅: 4987次
我们在编程中,通常都需要处理时间日期数据,这也是一种比较难于处理的数据类型,因为时间日期类型的结构相当复杂,并且还有一定的规则,如果在定义的时候不符合规则,程序在编译的时候就会出错。在Visual Basic .Net用以处理时间日期类型的结构(Structure)主要是2个,分别为DateTime和TimeSpan,这二个结构都位于命名空间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组件,分别是Button1至Button3,并在这三个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中Button3组件的Click事件对应的处理代码。
Private Sub Button3_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button3.Click
Dim dtMyDate As System.DateTime
Try
dtMyDate = DateTime.Parse ( TextBox19.Text )
'转换给定的日期时间字符串
Catch
MessageBox.Show ( "输入的时间日期字符串不合法!", "错误!" )
'提示出错
TextBox19.Text = ""
Return
End Try
'以上是判断输入日期时间字符串合法性的典型代码
End Sub
10. 获取计算机日期时间数据。程序要实现这个功能非常简单,只需要掌握表01和表02中列出的DateTime常用属性、方法的使用方法就能够方便完成了。具体到本程序具体的操作是用下列代码替换Form1.vb中Button2的Click事件对应的处理代码:
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
Dim dMyDate As DateTime = DateTime.Now
'创建实例,此实例存放当前日期和时间
TextBox1.Text = dMyDate.ToString ( )
'显示当前日期和时间
TextBox2.Text = dMyDate.Date
'显示当前日期
TextBox3.Text = dMyDate.Year
'显示年度
TextBox4.Text = dMyDate.Month
'显示月份
TextBox5.Text = dMyDate.Day
'显示日号
TextBox6.Text = dMyDate.DayOfYear
'显示当前天是一年中的第多少天
TextBox7.Text = dMyDate.DayOfWeek
'显示当前天是本星期中的第多少天
TextBox8.Text = dMyDate.ToLongDateString
'以长日期形式来显示日期
TextBox9.Text = dMyDate.ToShortDateString
'以短日期形式来显示日期
TextBox18.Text = dMyDate.TimeOfDay.ToString ( )
'显示当前时间
TextBox17.Text = dMyDate.Hour
'显示当前时间的小时
TextBox16.Text = dMyDate.Minute
'显示当前时间的分钟
TextBox15.Text = dMyDate.Second
'显示当前时间的秒
TextBox14.Text = dMyDate.Millisecond
'显示当前时间的毫秒
TextBox13.Text = dMyDate.ToLongTimeString
'以长时间形式来显示当前时间
TextBox12.Text = dMyDate.ToShortTimeString
'以短时间形式来显示当前时间
End Sub
11. 日期时间数据的运算。在下面介绍的代码是实现二个DateTime实例之差,即当前的时间和给定的时间之差。解决的步骤是首先判断给定的日期时间字符串的合法性,如果不合法,则返回。如果合法,则以此来创建DateTime实例dtMyDate。然后dtMyDate调用其Subtract方法减去当前的时间,并存放到TimeSpan实例tsTemp。tsTemp调用其Duration方法把二者之差的绝对值显示出来。具体到程序中的实现方法是用下列代码替换Form1.vb中的Button2的Click事件的处理代码:
Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.Click
Dim tsTemp As TimeSpan
Dim dtMyDate As DateTime
Try
dtMyDate = DateTime.Parse ( TextBox10.Text )
Catch
MessageBox.Show ( "输入的时间日期字符串不合法!" , "错误!" )
Return
End Try
'判断输入的时间日期字符串的合法性
tsTemp = dtMyDate.Subtract ( DateTime.Now )
'二个DateTime实例相减
TextBox11.Text = tsTemp.Duration.ToString ( )
'取二个DateTime之差绝对值,并显示出来
End Sub
至此在上述步骤都正确执行,并成功保存后,【处理日期时间数据】项目的全部工作就完成了。图04、图05和图06分别是【处理日期时间数据】项目编译后的运行界面:
图04:【处理日期时间数据】运行界面之一
图05:【处理日期时间数据】运行界面之二
图06:【处理日期时间数据】运行界面之三
四.小结:
本文介绍在Visual Basic .Net中日期时间类型数据的处理方法及在处理这些数据时的一些注意事项和技巧。以下就是本文中的知识点:
1. 结构和类的区别。
2. 用Date变量定义日期时间,及其注意事项。
3. DateTime和TimeSpan的主要区别,和二者主要的成员及其简单说明。
4. 判断给定时间日期的合法性。
5. 日期时间类型数据(DateTime实例)的运算。
6. 日期时间及其相关数值的获取。
如果您通过本文的介绍掌握了以上内容,那么本文的目的就算完成了,就让我们下一节再见吧!