You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取ISO 8601格式时间的hh:mm并完成分钟数的加减运算

优化方案

1. 更鲁棒的hh:mm提取方法

原有的子串截取法在固定ISO 8601格式的场景下可正常运行,改用正则匹配的兼容性更强,不会因为日期部分格式变动出现下标错位问题:

local isoStr = "2021-09-28T12:00:00-05:00"
-- 直接匹配T字符后的时分部分
local hhmm = isoStr:match("T(%d%d:%d%d)")
print(hhmm) -- 输出 12:00

2. 分钟加减最优实现

不需要拆分做复杂的进位借位判断,统一转换成「当天总分钟数」做运算,最后再格式化为hh:mm即可,逻辑简洁且不易出边界错误:

-- 工具函数:将hh:mm格式字符串转为当天总分钟数
local function hhmmToMinutes(hhmm)
    local h, m = hhmm:match("(%d%d):(%d%d)")
    return tonumber(h) * 60 + tonumber(m)
end

-- 工具函数:将当天总分钟数转为hh:mm格式字符串
local function minutesToHhmm(totalMinutes)
    -- 模1440处理跨天的正负偏移情况
    totalMinutes = totalMinutes % (24 * 60)
    local h = math.floor(totalMinutes / 60)
    local m = totalMinutes % 60
    return string.format("%02d:%02d", h, m)
end

-- 示例:给提取到的12:00减90分钟
local originHhmm = isoStr:match("T(%d%d:%d%d)")
local originMin = hhmmToMinutes(originHhmm)
-- 减90分钟,加偏移直接替换为+号即可
local newMin = originMin - 90
local newHhmm = minutesToHhmm(newMin)
print(newHhmm) -- 输出 10:30

该方案可完全替代原有OpenMath函数逻辑,无需处理复杂的条件判断,跨天、正负偏移场景都能自动适配。

内容的提问来源于stack exchange,提问作者Brannan Holland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:36:01