在vba中添加小时,分钟,秒的天数

时间:2018-03-28 12:29:15

标签: sql date ms-access time access-vba

我的数据库包含Column' StartDate' as' 01/01/2018 10:00'和' EndDate' as' 01/01/2018 11:25'。我有基于某些标准的多个记录集。

我想计算第二个' StartDate'之间的区别。第一个' EndDate'而不是总结他们所有的差异。

我已将示例数据库放在此处

http://sqlfiddle.com/#!9/2cc5ba

我在想使用查询是不可能的,所以我已经开始使用vba。

使用下面链接中的函数elapsedtime的帮助

https://msdn.microsoft.com/en-us/vba/access-vba/articles/calculate-elapsed-time

我可以将第一行的字符串作为145:30:00"小时:分钟:第二行"

问题编号:1 如何将此字符串更改为日期时间格式。

我尝试过格式化(CDate(Caclute_time)," hh:mm:ss")'但它给了我一个eroor类型不匹配。

问题编号:2

我如何添加时间 例如。 104:40:00(hh:mm:ss)+ 20:21:00(hh:mm:ss)给我的结果为125:01:00

2 个答案:

答案 0 :(得分:0)

您应该始终将时间留作日期,直到您要格式化它为止。既然你没有,你就会陷入一团糟。

我们需要2个函数,一个用于将日期转换为hh:mm:ss格式,另一个用于将其强制转换为日期。

Public Function DateToHHMMSS(theDate As Date) As String
    DateToHHMMSS = Int(CSng(theDate * 24)) & ":" & Format(theDate, "nn:ss")
End Function

Public Function HHMMSSToDate(theString As String) As Date
    Dim dateArr As Variant
    dateArr = Split(theString, ":")
    If UBound(dateArr) = 2 Then
        HHMMSSToDate = TimeSerial(dateArr(0), dateArr(1), dateArr(2))
    End If
End Function

使用这些功能,您可以轻松地将这些日期添加到一起,例如:

DateToHHMMSS(HHMMSSToDate("104:40:00") + HHMMSSToDate("20:21:00"))

要将字符串转换为日期,只需使用:

DateToHHMMSS("104:40:00")

答案 1 :(得分:0)

只是总结时差:

Select Sum([DateEnde] - [DateStart])
From MTTR

然后使用如下函数对其进行格式化:

Public Function FormatHourMinute( _
  ByVal datTime As Date, _
  Optional ByVal strSeparator As String = ":") _
  As String

' Returns count of days, hours and minutes of datTime
' converted to hours and minutes as a formatted string
' with an optional choice of time separator.
'
' Example:
'   datTime: #10:03# + #20:01#
'   returns: 30:04
'
' 2005-02-05. Cactus Data ApS, CPH.

  Dim strHour       As String
  Dim strMinute     As String
  Dim strHourMinute As String

  strHour = CStr(Fix(datTime) * 24 + Hour(datTime))
  ' Add leading zero to minute count when needed.
  strMinute = Right("0" & CStr(Minute(datTime)), 2)
  strHourMinute = strHour & strSeparator & strMinute

  FormatHourMinute = strHourMinute

End Function
像这样:

Select 
    *,
    Nz((Select Top 1 T.DateStart 
    From MTTR As T 
    Where T.LFD_NR > MTTR.LFD_NR
    Order By LFD_NR Desc), [DateEnde]) - DateEnde As TimeDiff
From 
    MTTR

将此保存为MTTR_Diff。

然后:

Select 
    FormatHourMinute(Sum([TimeDiff))
From 
    MTTR_Diff