ACCESS中如何将两日期相减后的数字转换为时间格式(hh:mm:ss)

想在ACCESS中实现两个常规时间格式的数据(YYYY-MM-DD HH:MM:SS)相减后得到HH:MM:SS类型的数据。试过DATEDIFF,得出的是数,如何转换为(HH:MM:SS)?或者有其它的好办法,谢谢

这个需求可以分别使用datediff函数求出两个时间的小时差、分差和秒差,然后将它们拼接起来,但是因为需要实现HH:MM:SS格式,表达式会变得非常冗长,例如:
Me.Text6 = IIf(DateDiff("h", #11/12/2013 12:30:05 PM#, #11/12/2013 3:30:45 PM#) < 10, 0 & DateDiff("h", #11/12/2013 12:30:05 PM#, #11/12/2013 3:30:45 PM#), DateDiff("h", #11/12/2013 12:30:05 PM#, #11/12/2013 3:30:45 PM#)) & ";" & Right(((DateDiff("n", #11/12/2013 12:30:05 PM#, #11/12/2013 3:30:45 PM#) Mod 60) + 100), 2) & ":" & Right(((DateDiff("s", #11/12/2013 12:30:05 PM#, #11/12/2013 3:30:45 PM#) Mod 3600) + 100), 2)
可见其可读性非常差,需要反复多次输入两个时间,可以说基本不具使用价值。

为了提高易用性建议采用编写自定义函数方式解决。

于数据库视图选择“模块”对象 点击“新建”命令打开模块VBE编辑器,将下列代码复制黏贴上去
Option Compare Database
Public Function getTimeDiffHhMmSs(time1 As Date, time2 As Date) As String

Dim Ss As Long, H As Long, M As Byte, S As Byte
Ss = Abs(DateDiff("s", time1, time2))
H = Ss \ 3600
M = (Ss Mod 3600) \ 60
S = Ss Mod 60
getTimeDiffHhMmSs = IIf(H < 10, Right(H + 100, 2), H) & ":" & IIf(M < 10, Right(M + 100, 2), M) & ":" & IIf(S < 10, Right(S + 100, 2), S)

End Function
然后保存
跟着就可以在数据库的任何地方使用这个自定义函数了,非常方便。

例如:
getTimeDiffHhMmSs(#2013-11-11 13:40:10#, #2013-11-11 15:45:18#) 返回 02:05:08
getTimeDiffHhMmSs(Now(),#2013-11-11 17:45:18#) 返回 55:53:09
getTimeDiffHhMmSs(Date(),Now()) 返回 09:59:46 (今天凌晨零时到现在为止已经过去的时间)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-13
2013-11-13 17:50:00 和 2013-11-13 18:50:00 之间
天数差0
小时差 1
分钟差 60
秒差 3600
你要转换成什么样的HH:MM:SS?追问

2013-11-11 11:11:11- 2013-11-09 11:11:10 ,我希望结果是48:00:01 现在的结果是2点几的数字。

追答

你想显示小时数是吧? 你DATEDIFF语句怎么写的?

追问

不是光小时数,是显示HH:MM:SS,
DATEDIFF("s",date1,date2)这个出来的是数字,如何转换?
或有其它方式?
formatdatetime也不行,出不来我要的结果。

追答

"s"参数出来的秒数, 好像没有现成的函数转成你要的格式
只能自己自己计算了, 结果秒数除以3600得到小时数, 余数除以60得到分钟数, 再得到的余数为秒, 然后拼接成结果字符串 小时数 & ":" & 分钟数 & ":" & 秒数
不过还不如转成 48小时0分1秒 直观

追问

要是能转格式早就转了。。。能具体写下如何将得到的数拼接么,谢谢

追答

可以写一个自定义函数, 输入一个数字参数 秒数 ,比如172801
得到一个输出的字符串 "48:00:01"
我有空的时候写一下
问题是你的需求需要得到这么精确的结果吗? 显示48hours不可以吗?