鉴于两个YYYY-MM-DD-HH:从字符串格式化的MM日期,我想得到两个日期之间的小时差。这是我的以下代码:
Dim ds1 As String: ds1 = "March 3, 2015 2:00pm "
Dim ds2 As String: ds2 = "March 4, 2015 3:00pm " '25 hours difference
ds1 = Format(ds1, "YYYY-MM-DD-HH:MM") '2015-03-03-14:00
ds2 = Format(ds2, "YYYY-MM-DD-HH:MM") '2015-03-04-15:00
Dim d As Date: d = CDate(ds2) - CDate(ds1) 'gives the 25 hour diffrence
上面的代码在CDate(ds2)和CDate(ds1)上给出了“类型不匹配”错误。由于CDate仅适用于日期而非小时/分钟。
如何获得这两个日期之间的小时差异?
答案 0 :(得分:2)
时间间隔不是日期,因此您的变量d
不应为Date
类型。如您所希望的那样,它应该是一种数字数据类型,例如Long
。
对于小时差异,您可以使用DateDiff
功能,为其提供您想要计算差异的单位:
Dim ds1 As String
Dim ds2 As String
Dim d As Long
ds1 = "2015-03-03 14:00"
ds2 = "2015-03-04 15:00"
d = DateDiff("h", CDate(ds1), CDate(ds2))
Debug.Print d ' outputs 25
日期的Format
仅在参数可以转换为日期时有效,因此您也可以立即在原始字符串上执行CDate
。
如果您可以选择格式,则"2015-03-03 14:00"
格式具有首选项(日期和时间部分之间没有连字符)。在我的设置中,如果那里有连字符,则转换失败。
答案 1 :(得分:1)
使用DateDiff方法
Sub test()
Dim ds1 As String: ds1 = "March 3, 2015 2:00pm "
Dim ds2 As String: ds2 = "March 4, 2015 3:00pm " '25 hours difference
ds1 = Format(ds1, "YYYY-MM-DD HH:MM") '2015-03-03-14:00
ds2 = Format(ds2, "YYYY-MM-DD HH:MM") '2015-03-04-15:00
Dim d As Date: d = CDate(ds2) - CDate(ds1) 'gives the 25 hour diffrence
youranswer = DateDiff("h", ds1, ds2)
End Sub
答案 2 :(得分:1)
仅供参考:如果您减去真实日期,则会在几天内返回差异。乘以24(因为一天中有24小时),你可以在几小时内获得差异 e.g;
Print (#03-04-2015 15:00# - #03-03-2015 14:00#) *24
返回24.9999999999418