邮电部第三研究所 张宝国
---- 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 调 用 取 得 本 机 的 时 间 分 隔 符, 这 里 不 再 详 述。
……