如何在VBScript中计算hh:mm格式时间字符串差值?解决类型不匹配
解决VBScript时间差值计算与时间匹配问题
你遇到的类型不匹配错误,是因为sunset和time都是字符串类型,VBScript无法直接对字符串执行减法运算。下面提供两种可行的解决方案:
方案1:转换为时间类型计算差值
利用TimeValue将hh:mm字符串转为可计算的时间对象,再用DateDiff函数计算差值:
dim fs, r, s, t, sunrise, sunset, currentTime, difference set fs=CreateObject("Scripting.FileSystemObject") set r=fs.OpenTextFile("c:\wdisplay\html\customtextout21.txt") set s=fs.OpenTextFile("c:\wdisplay\html\customtextout22.txt") set t=fs.OpenTextFile("c:\wdisplay\html\customtextout23.txt") sunrise=r.read(5) sunset=s.read(5) currentTime=t.read(5) ' 将字符串转为时间对象 sunsetTime = TimeValue(sunset) currentDateTime = TimeValue(currentTime) ' 计算分钟差值("n"代表分钟,也可改用"h"小时、"s"秒) difference = DateDiff("n", currentDateTime, sunsetTime) ' 考虑时间精度,用±1分钟的范围判断匹配(避免因系统时间误差错过触发) if Abs(difference) <= 1 then Call YourSubroutine() ' 替换为你的子程序名称 end if ' 关闭文件并释放资源 r.Close s.Close t.Close set fs=nothing set r=nothing set s=nothing set t=nothing
方案2:转换为总分钟数做数值比较
拆分时间字符串的小时和分钟,计算成总分钟数后直接做数值运算:
dim fs, r, s, t, sunrise, sunset, currentTime, sunsetMins, currentMins, difference set fs=CreateObject("Scripting.FileSystemObject") set r=fs.OpenTextFile("c:\wdisplay\html\customtextout21.txt") set s=fs.OpenTextFile("c:\wdisplay\html\customtextout22.txt") set t=fs.OpenTextFile("c:\wdisplay\html\customtextout23.txt") sunrise=r.read(5) sunset=s.read(5) currentTime=t.read(5) ' 拆分时间为小时和分钟,计算总分钟数 sunsetMins = Split(sunset, ":")(0)*60 + Split(sunset, ":")(1) currentMins = Split(currentTime, ":")(0)*60 + Split(currentTime, ":")(1) difference = sunsetMins - currentMins ' 用±1分钟的范围判断时间匹配 if Abs(difference) <= 1 then Call YourSubroutine() end if ' 清理资源 r.Close s.Close t.Close set fs=nothing set r=nothing set s=nothing set t=nothing
额外提示
- 务必关闭打开的文件对象,避免系统资源泄漏
- 可添加
On Error Resume Next做简单错误处理,防止文件读取失败导致脚本崩溃 - 不建议直接判断差值为0,因为系统时间的精度可能导致完全匹配的情况极少发生
内容的提问来源于stack exchange,提问作者Tony Buchan
相关产品推荐
相关产品推荐

