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

如何从TimeKey生成15分钟间隔编号与间隔名称

实现15分钟时间间隔编号与名称的推导方法

核心推导逻辑

1. 15分钟间隔编号计算

将TimeKey转换为当天的总分钟数(小时×60 + 分钟),通过以下公式得到编号:
间隔编号 = (总分钟数 // 15) + 1

  • 原理:每15分钟为一个区间,从0分钟开始计数,第0个区间对应编号1,以此类推,23:59所在的第95个区间对应编号96。
  • 验证示例:
    • 00:00:00 → 总分钟数0 → 0//15=0 → 0+1=1
    • 01:15:00 → 总分钟数75 →75//15=5 →5+1=6
    • 23:59:59 → 总分钟数1439 →1439//15=95 →95+1=96

2. 15分钟间隔名称计算

  1. 确定当前区间的起始分钟:起始分钟 = (总分钟数 //15) ×15
  2. 计算结束分钟:结束分钟 = 起始分钟 +14,若结果超过1439(即23:59)则取1439
  3. 将起始分钟、结束分钟分别格式化为HH:MM格式,拼接为起始时间-结束时间的形式
  • 验证示例:
    • 04:30:00 → 起始分钟270 → 04:30,结束分钟284 →04:44 → 04:30-04:44
    • 23:59:59 → 起始分钟1425 →23:45,结束分钟1439 →23:59 →23:45-23:59

代码实现示例

Python 实现

def get_15min_interval(time_str):
    # 拆分时间为时分秒
    hh, mm, ss = map(int, time_str.split(':'))
    total_min = hh * 60 + mm
    
    # 计算间隔编号
    interval_num = (total_min // 15) + 1
    
    # 计算起始和结束分钟
    start_min = (total_min // 15) * 15
    end_min = min(start_min + 14, 1439)  # 限制最大分钟数为1439(23:59)
    
    # 格式化为HH:MM
    start_hh, start_mm = divmod(start_min, 60)
    end_hh, end_mm = divmod(end_min, 60)
    interval_name = f"{start_hh:02d}:{start_mm:02d}-{end_hh:02d}:{end_mm:02d}"
    
    return interval_num, interval_name

# 测试示例数据
test_times = [("00:00:00", 1, "00:00-00:14"),
              ("01:15:00", 6, "01:15-01:29"),
              ("04:30:00", 19, "04:30-04:44"),
              ("05:15:00", 22, "05:15-05:29")]

for time, expected_num, expected_name in test_times:
    num, name = get_15min_interval(time)
    assert num == expected_num and name == expected_name, f"测试失败:{time}"
print("所有测试通过")

SQL 实现(MySQL)

假设数据表time_data包含ID和TimeKey字段(TimeKey为字符串类型,若为时间类型可去掉STR_TO_DATE函数):

SELECT
    ID,
    TimeKey,
    -- 计算间隔编号
    FLOOR((HOUR(STR_TO_DATE(TimeKey, '%H:%i:%s'))*60 + MINUTE(STR_TO_DATE(TimeKey, '%H:%i:%s'))) / 15) + 1 AS `15分钟间隔编号`,
    -- 计算间隔名称
    CONCAT(
        DATE_FORMAT(
            MAKETIME(
                FLOOR((HOUR(STR_TO_DATE(TimeKey, '%H:%i:%s'))*60 + MINUTE(STR_TO_DATE(TimeKey, '%H:%i:%s')))/15)*15 DIV 60,
                FLOOR((HOUR(STR_TO_DATE(TimeKey, '%H:%i:%s'))*60 + MINUTE(STR_TO_DATE(TimeKey, '%H:%i:%s')))/15)*15 MOD 60,
                0
            ),
            '%H:%i'
        ),
        '-',
        DATE_FORMAT(
            MAKETIME(
                (FLOOR((HOUR(STR_TO_DATE(TimeKey, '%H:%i:%s'))*60 + MINUTE(STR_TO_DATE(TimeKey, '%H:%i:%s')))/15)*15 + 14) DIV 60,
                (FLOOR((HOUR(STR_TO_DATE(TimeKey, '%H:%i:%s'))*60 + MINUTE(STR_TO_DATE(TimeKey, '%H:%i:%s')))/15)*15 + 14) MOD 60,
                59
            ),
            '%H:%i'
        )
    ) AS `15分钟间隔名称`
FROM time_data;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:04:55