0

我刚刚写了一个代码来查看两个格式的持续时间的添加hh:mm:ss;但没有得到我正在寻找的那个。

代码

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
4

3 回答 3

2

您可以使用TimeValue返回包含时间的子类型 Date 的 Variant 的函数。

 Option Explicit

Dim v1 : v1 = #20:20:10#
Dim v2 : v2 = #20:20:10#

MsgBox (TimeValue(v1 + v2))

编辑:-

AFAIK,即使您使用FormatDateTime(date,format)格式,也没有直接的方法来进行这种添加vbLongTime您必须使用添加和打印小时数的正常逻辑,然后是分钟和秒,如下面的代码

  Option Explicit 
  Dim v1 : v1 = #20:20:10#
  Dim v2 : v2 = #20:20:10#
  Msgbox Hour(v1)+Hour(v1)&":"&Minute(v1)+Minute(v2)&":"&Second(v1)+Second(v2)
于 2012-12-27T07:26:26.663 回答
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

于 2012-12-27T19:17:40.467 回答
1

Excel 中的日期在内部存储为自 1900 年 1 月 1 日以来的天数。
因此 1 天 = 1。
因此 1 小时 = 1/24。
按照这个逻辑,20 小时 + 20 小时返回一个日期,我预计它是 1900 年 1 月 2 日下午 4 点(40-24 点)。
我不是 VbScript 专家,但在 VBA 中,您可以使用自定义格式来解决问题:
MsgBox Format(v1 + v2, "[hh]:mm")
hh 周围的 [] 强制将小时显示的值应用于整个值,而不仅仅是小数部分。

另一种解决方案是将时间值乘以 24。这将返回“十进制小时”。
MsgBox (#20:00# + #20:30#)*24如您所料,返回 40.5。

于 2012-12-27T08:17:45.707 回答