DateDiff 函数 (Visual Basic)
更新:2007 年 11 月
返回一个 Long 值,该值指定两个 Date 值之间的时间间隔数。
Public Overloads Function DateDiff( _
ByVal Interval As [ DateInterval | String ], _
ByVal Date1 As DateTime, _
ByVal Date2 As DateTime, _
Optional ByVal DayOfWeek As FirstDayOfWeek = FirstDayOfWeek.Sunday, _
Optional ByVal WeekOfYear As FirstWeekOfYear = FirstWeekOfYear.Jan1 _
) As Long
参数
Interval
必选。DateInterval 枚举值或 String 表达式,表示要用作 Date1 和 Date2 之间差额的单位的时间间隔。Date1
必需。Date。要在计算中使用的第一个日期/时间值。Date2
必需。Date。要在计算中使用的第二个日期/时间值。DayOfWeek
可选。选自 FirstDayOfWeek 枚举的值,用于指定一周的第一天。如果未指定,则使用 FirstDayOfWeek.Sunday。WeekOfYear
可选。选自 FirstWeekOfYear 枚举的值,该枚举用于指定一年的第一周。如果未指定,则使用 FirstWeekOfYear.Jan1。
设置
Interval 参数可以有以下设置之一。
枚举值 |
字符串值 |
时间差额的单位 |
---|---|---|
DateInterval.Day |
“d” |
天 |
DateInterval.DayOfYear |
“y” |
天 |
DateInterval.Hour |
“h” |
小时 |
DateInterval.Minute |
“n” |
分钟 |
DateInterval.Month |
“m” |
月 |
DateInterval.Quarter |
“q” |
季度 |
DateInterval.Second |
“s” |
秒 |
DateInterval.Weekday |
“w” |
周 |
DateInterval.WeekOfYear |
“ww” |
日历周 |
DateInterval.Year |
“yyyy” |
年份 |
DayOfWeek 参数可以有以下设置之一。
枚举值 |
值 |
说明 |
---|---|---|
FirstDayOfWeek.System |
0 |
系统设置中指定的周的第一天 |
FirstDayOfWeek.Sunday |
1 |
星期日(默认) |
FirstDayOfWeek.Monday |
2 |
星期一(依照 ISO 8601 标准第 3.17 节) |
FirstDayOfWeek.Tuesday |
3 |
星期二 |
FirstDayOfWeek.Wednesday |
4 |
星期三 |
FirstDayOfWeek.Thursday |
5 |
星期四 |
FirstDayOfWeek.Friday |
6 |
星期五 |
FirstDayOfWeek.Saturday |
7 |
星期六 |
WeekOfYear 参数可以有以下设置之一。
枚举值 |
值 |
说明 |
---|---|---|
FirstWeekOfYear.System |
0 |
系统设置中指定的年的第一周 |
FirstWeekOfYear.Jan1 |
1 |
1 月 1 日所在的周(默认) |
FirstWeekOfYear.FirstFourDays |
2 |
至少有四天属于新年的周(依照 ISO 8601 标准第 3.17 节) |
FirstWeekOfYear.FirstFullWeek |
3 |
新年的第一个全周 |
异常
异常类型 |
错误号 |
条件 |
---|---|---|
Interval 无效。 |
||
Date1、Date2 或 DayofWeek 超出范围。 |
||
Date1 或 Date2 是无效类型。 |
如果正在升级使用非结构化错误处理方式的 Visual Basic 6.0 应用程序,请参见“错误号”一列。(您可以根据 Number 属性(Err 对象) 比较错误号。) 然而,如果可能,应当考虑用 Visual Basic 的结构化异常处理概述 替换这种错误控制。
备注
可以使用 DateDiff 函数来确定两个日期/时间值之间存在多少指定时间间隔。例如,可以使用 DateDiff 来计算两个日期之间相隔几日,或计算从今天起到年底相隔几周。
行为
**参数处理。**DateDiff 将 Date1 值从 Date2 值中减去,得到差值。调用程序中的两个值都未更改。
**返回值。**因为 Date1 和 Date2 的数据类型为 Date,所以它们所存储系统计时器上日期和时间值精确到 100 毫微秒。可是,DateDiff 总是将时间间隔数返回成 Long 数据类型值。
若 Date1 表示的日期和时间比 Date2 的晚,则 DateDiff 返回负数。
**间隔天数。**如果将 Interval 设置为 DateInterval.DayOfYear,对它的处理与 DateInterval.Day 相同,因为 DayOfYear 不是时间间隔的有意义单位。
**间隔周数。**如果将 Interval 设置为 DateInterval.WeekOfYear,则返回值表示包含 Date1 的周的第一天与包含 Date2 的周的第一天相隔的周数。下面的示例演示了这样所产生的结果与 DateInterval.Weekday 所产生的结果的不同之处。
' The following statements set datTim1 to a Thursday ' and datTim2 to the following Tuesday. Dim datTim1 As Date = #1/4/2001# Dim datTim2 As Date = #1/9/2001# ' Assume Sunday is specified as first day of the week. Dim wD As Long = DateDiff(DateInterval.Weekday, datTim1, datTim2) Dim wY As Long = DateDiff(DateInterval.WeekOfYear, datTim1, datTim2)
在上面的示例中,DateDiff 为 wD 返回 0,因为两个日期之间的差额小于七天,而它为 wY 返回 1,因为两个日历周各自的第一天之间相差七天。
警告: 如果 Date1 的时间部分比 Date2 的时间部分大,且 Interval 设置为 DateInterval.WeekOfYear,则 DateDiff 函数将返回一个小于正确值的值。
**更大间隔。**如果将 Interval 设置为 DateInterval.Year,则仅从 Date1 和 Date2 的年份部分计算返回值。同样,DateInterval.Month 的返回值仅从参数的年份和月份部分计算,而 DateInterval.Quarter 的返回值从包含两个日期的季度计算。
例如,比较以下年份的 12 月 31 日与 1 月 1 日时,即使最多只过了一天,DateDiff 也为 DateInterval.Year、DateInterval.Quarter 或 DateInterval.Month 返回 1。
**其他间隔。**因为每个 Date 值都由 DateTime 结构支持,所以其方法在查找时间间隔中提供了附加选项。例如,可以以其中一种重载形式使用 Subtract 方法:DateTime.Subtract 将 TimeSpan 从 Date 变量中减去,并返回另一个 Date 值,DateTime.Subtract 减去 Date 值,并返回 TimeSpan。可以给过程计时,以确定它所花的毫秒数,如下面的示例所示。
Dim startTime As Date = Now ' Run the process that is to be timed. Dim runLength As Global.System.TimeSpan = Now.Subtract(startTime) Dim millisecs As Integer = runLength.Milliseconds
示例
本示例使用 DateDiff 函数显示给定日期和今天的间隔天数。
Dim firstDate, msg As String
Dim secondDate As Date
firstDate = InputBox("Enter a date")
secondDate = CDate(firstDate)
msg = "Days from today: " & DateDiff(DateInterval.Day, Now, secondDate)
MsgBox(msg)
要求
**模块:**DateAndTime
**程序集:**Visual Basic 运行库(在 Microsoft.VisualBasic.dll 中)