VB無法在日期/時間字段中存放和測量累計時間, 日期/時間存放成特定的時間點而不是一個時間跨度,並且無法在一個日期/時間變量中存 放超過24小時的值。如輸入9:30,輸入的不是某台設備工作的時間長度,而是一個特定時間, 即是早晨9:30。在日期/時間字段中輸入26:30,VB會顯示出錯信息,認為這不是一個合法的 輸入。VB不是不能進行日期/時間字段的累加計算,它在內部以浮點值的形式存放,能夠進 行累加計算,但結果不是我們希望的那樣。
筆者在工作中遇到計算累計時間問題,利用所編 的兩個簡短的函數dhcTime和dhcMinutes,得到滿意的解決。函數dhcMinutes接受以字 符串值形式輸入的累計時間作為參數,返回的時間值以分鐘數表示,這樣就可以方便地對 一系列時間值的分鐘數求和。然後用函數dhcTime將分鐘數和轉換成小時和分鐘,並以相應 的格式HH:MM字符串輸出表示。
函數dhcMinutes程序如下所示,取出以字符串值 形式輸入的累計時間的小時值乘以60,再與累計時間的分鐘值相加,產生長整數表示的分 鐘數。
FunctiondhcMinutes(strTimeAsString)AsLong intPos=InStr(strTime,":") strHours=Left(strTime,intPos-1) strMinutes=Right(strTime,Len(strTime)-intPos) dhcMinutes=Val(strHours)*60+Val(strMinutes) EndFunction函數dhcTime程序如下所示,將分鐘數用""運算符整 除得到小時數(用60整除的整數)。用MOD運算符得到分鐘數(用60整除的余數)。然後函數將輸 出格式化為通常的時間表示樣式。
FunctiondhcTime(lngMinutesAsLong)AsString dhcTime=Format(lngMinutes60,"0")&":" &Format(lngMinutesMod60,"00") EndFunction例如,要求3個時間長度100:03、21:15和0:34的和,可 用下列表達式:
dhcTime(dhcMinutes("100:03") +dhcMinutes("21:15")+dhcMinutes("0:34"))表達式結果是字符串值"121:52"。
再如要求4個時間長度11:15、26:06、0:89和112:55 的和,可用下列表達式:
dhcTime(dhcMinutes("11:15")+dhcMinutes("26:06") +dhcMinutes("0:89")+dhcMinutes("112:55"))表達式結果是字符串值"151:45"。
至於時間分隔符,本文以通常的格式HH:MM輸出表 示,也可以用WINDOWSAPI調用取得本機的時間分隔符,這裡不再詳述。