【问题标题】:Addition of days with hours , minutes , second in vba在 vba 中添加带小时、分钟、秒的天数
【发布时间】:2018-09-07 03:26:21
【问题描述】:

我有一个数据库,列“StartDate”为“01/01/2018 10:00”,“EndDate”为“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 如何将此字符串更改为日期时间格式。

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

问题编号:2

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

【问题讨论】:

    标签: sql date ms-access time vba


    【解决方案1】:

    您应该始终将时间保留为日期,直到您要对其进行格式化。既然你没有这样做,你就会把自己弄得一团糟。

    我们需要 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")
    

    【讨论】:

    • 您的评论对我来说很有意义,现在我将日期的差异转换为秒,然后对所有秒进行求和,最后我将这些秒转换为天,小时:分钟:秒。
    【解决方案2】:

    只需将时间差相加即可:

    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
    

    【讨论】:

    • function FormatHourMinute 在我的情况下不会帮助我,因为我想得到第二个“StartDate”和第一个“EndDate”之间的区别,而不是把它们加起来。但是您的函数仍然可以计算两个日期之间的差异。
    • 在 sqlfiddle 上运行查询时出现错误。某些东西丢失或搞砸了。
    • sql fiddle 仅适用于 mysql。使用 Access 中的查询设计器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 2012-01-06
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多