我刚刚写了一段代码,看到添加了两个hh:mm:ss
格式的持续时间;但没有得到我正在寻找的那个。
CODE
Option Explicit
Dim v1 : v1 = #20:20:10#
Dim v2 : v2 = #20:20:10#
MsgBox (v1 + v2)
输出来自12/31/1899 4:40:20 PM
你能指导我吗?
更新
代码
Option Explicit
Dim V1 : v1 = #20:20:10#
Dim V2 : v2 = #20:42:10#
MsgBox (Hour(V1) + Hour(V2)) & ":" & Minute(V1) + Minute(V2) & ":" & Second(V1) + Second(V2)
输出来自40:62:20
更新代码
SumDate = "00:00:00"
For IndexSearch = 0 To ArrayListTaskDetails.Count - 1 Step 4
dt1 = ArrayListTaskDetails(IndexSearch + 3)
SumDate = TimeAdd(dt1,SumDate)
Loop
Function TimeAdd(dt1,dt2)
If (IsDate(dt1) And IsDate(dt2)) = False Then
TimeAdd = "00:00:00"
Exit Function
End If
TimeAdd = Hour(dt1)+Hour(dt2) & ":" & Minute(dt1)+Minute(dt2) & ":" & Second(dt1)+Second(dt2)
End Function
答案 0 :(得分:2)
您可以使用TimeValue
函数返回包含时间的子类型Date的变体。
Option Explicit
Dim v1 : v1 = #20:20:10#
Dim v2 : v2 = #20:20:10#
MsgBox (TimeValue(v1 + v2))
修改: - 强>
AFAIK,即使您使用格式为FormatDateTime(date,format)
的{{1}},也无法直接进行此类添加。您必须使用正常的加法和逻辑逻辑。印刷时间,分钟和时间然后如下面的代码
vbLongTime
答案 1 :(得分:2)
现在分钟和秒被标准化:
Sub SummingTimes()
Dim v1: v1 = #8:32:33 PM#
Dim v2: v2 = #8:32:33 PM#
Dim hours As Variant
Dim minutes As Variant
Dim seconds As Variant
Dim timetext As String
seconds = Second(v1) + Second(v2)
minutes = Int(seconds / 60)
seconds = seconds - minutes * 60
minutes = minutes + Minute(v1) + Minute(v2)
hours = Int(minutes / 60)
minutes = minutes - hours * 60
hours = hours + Hour(v1) + Hour(v2)
timetext = hours & ":" & minutes & ":" & seconds
MsgBox timetext
End Sub
消息框显示41:5:6
。如果您想获得41:05:06
,则需要进行一些字符串操作。
Excel电子表格:http://www.bumpclub.ee/~jyri_r/Excel/Summing_hh-mm-ss.xls
答案 2 :(得分:1)
Excel中的日期在内部存储为自19/1/19以来的天数
因此1天= 1.
因此1小时= 1/24
根据这个逻辑,20小时+20小时返回一个日期,我预计将在1月21日下午4点(40-24)。
我不是VbScript的专家,但在VBA中,您可以使用自定义格式解决问题:
MsgBox Format(v1 + v2, "[hh]:mm")
hh周围的[]强制值将小时显示应用于整个值,而不仅仅是小数部分。
另一个解决方案是将时间值乘以24.返回“十进制小时数”
MsgBox (#20:00# + #20:30#)*24
会像您期望的那样返回40.5。