VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 用VB 计 算 累 计 时 间 值
发表评论(0)作者:张 宝 国, 平台:VB6.0+Win98, 阅读:9917, 日期:2001-04-24
用VB 计 算 累 计 时 间 值
邮 电 部 第 三 研 究 所
张 宝 国
---- VB 无 法 在 日 期/ 时 间 字 段 中 存 放 和 测 量 累 计 时 间, 日 期/ 时 间 存 放 成 特 定 的 时 间 点 而 不 是 一 个 时 间 跨 度, 并 且 无 法 在 一 个 日 期/ 时 间 变 量 中 存 放 超 过24 小 时 的 值。 如 输 入9:30, 输 入 的 不 是 某 台 设 备 工 作 的 时 间 长 度, 而 是 一 个 特 定 时 间, 即 是 早 晨9:30。 在 日 期/ 时 间 字 段 中 输 入26:30,VB 会 显 示 出 错 信 息, 认 为 这 不 是 一 个 合 法 的 输 入。VB 不 是 不 能 进 行 日 期/ 时 间 字 段 的 累 加 计 算, 它 在 内 部 以 浮 点 值 的 形 式 存 放, 能 够 进 行 累 加 计 算, 但 结 果 不 是 我 们 希 望 的 那 样。

---- 笔 者 在 工 作 中 遇 到 计 算 累 计 时 间 问 题, 利 用 所 编 的 两 个 简 短 的 函 数 dhcTime 和 dhcMinutes , 得 到 满 意 的 解 决。 函 数dhcMinutes 接 受 以 字 符 串 值 形 式 输 入 的 累 计 时 间 作 为 参 数, 返 回 的 时 间 值 以 分 钟 数 表 示, 这 样 就 可 以 方 便 地 对 一 系 列 时 间 值 的 分 钟 数 求 和。 然 后 用 函 数dhcTime 将 分 钟 数 和 转 换 成 小 时 和 分 钟, 并 以 相 应 的 格 式HH:MM 字 符 串 输 出 表 示。

---- 函 数dhcMinutes 程 序 如 下 所 示, 取 出 以 字 符 串 值 形 式 输 入 的 累 计 时 间 的 小 时 值 乘 以60, 再 与 累 计 时 间 的 分 钟 值 相 加, 产 生 长 整 数 表 示 的 分 钟 数。

Function dhcMinutes(strTime As String) As Long
intPos = InStr(strTime, ":")
strHours = Left(strTime, intPos - 1)
strMinutes = Right(strTime, Len(strTime) - intPos)
dhcMinutes = Val(strHours) * 60 + Val(strMinutes)
End Function

---- 函 数dhcTime 程 序 如 下 所 示, 将 分 钟 数 用"\" 运 算 符 整 除 得 到 小 时 数( 用60 整 除 的 整 数)。 用MOD 运 算 符 得 到 分 钟 数( 用60 整 除 的 余 数)。 然 后 函 数 将 输 出 格 式 化 为 通 常 的 时 间 表 示 样 式。
Function dhcTime(lngMinutes As Long) As String
dhcTime = Format(lngMinutes \ 60, "0") & ":"
   & Format(lngMinutes Mod 60, "00")
End Function

---- 例 如, 要 求3 个 时 间 长 度100:03、21:15 和0:34 的 和, 可 用 下 列 表 达 式:
dhcTime (dhcMinutes("100:03")
   + dhcMinutes("21:15") + dhcMinutes("0:34"))

---- 表 达 式 结 果 是 字 符 串 值"121:52"。
---- 再 如 要 求4 个 时 间 长 度11:15、26:06、0:89 和112:55 的 和, 可 用 下 列 表 达 式:

dhcTime (dhcMinutes("11:15") + dhcMinutes("26:06")
     + dhcMinutes("0:89")+ dhcMinutes("112:55"))

---- 表 达 式 结 果 是 字 符 串 值"151:45"。
---- 至 于 时 间 分 隔 符, 本 文 以 通 常 的 格 式HH:MM 输 出 表 示, 也 可 以 用WINDOWS API 调 用 取 得 本 机 的 时 间 分 隔 符, 这 里 不 再 详 述。