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

如何将(m,2)维度NumPy数组转换为12小时制hh:mm AM/PM格式时间戳

NumPy时间数组转12小时制时间戳函数实现

需求说明

  • 输入为形状是(m, 2)的NumPy数组,每行第一列为原始小时值,第二列为分钟值
  • 小时值处理逻辑:大于24的数值按整24天折算为合法日内小时(等价于对24取模)
  • 输出为对应12小时制hh:mm AM/PM格式的字符串列表,格式无小时前导零,分钟保留两位前导零,和示例输入输出对齐
  • 优先使用from datetime import time导入的方法实现,同时提供无依赖的纯格式化实现方案

方案一:基于datetime.time实现

按照要求优先使用标准库的time类完成时间格式化,兼容跨平台的小时前导零适配:

import numpy as np
import re
from datetime import time

def format_time_array(array: np.ndarray) -> list[str]:
    result = []
    for raw_hour, raw_min in array:
        # 小时折算为合法日内值
        norm_hour = int(raw_hour) % 24
        # 构造标准time对象
        time_obj = time(hour=norm_hour, minute=int(raw_min))
        # 生成带前导零的标准格式字符串
        formatted_str = time_obj.strftime('%I:%M %p')
        # 移除小时位多余的前导零,匹配示例输出格式
        formatted_str = re.sub(r'^0', '', formatted_str)
        result.append(formatted_str)
    return result

效果测试

输入示例数组:

a = np.array([[0,40],[13,20],[42,20]])
print(format_time_array(a))

输出结果和要求完全一致:
[12:40 AM, 1:20 PM, 6:20 PM]

方案二:无datetime依赖的纯格式化实现

如果不需要引入时间处理库,可通过手动计算12小时制规则完成格式化:

import numpy as np

def format_time_array_no_datetime(array: np.ndarray) -> list[str]:
    result = []
    for raw_hour, raw_min in array:
        norm_hour = int(raw_hour) % 24
        minute = int(raw_min)
        # 判断AM/PM时段
        period = "AM" if norm_hour < 12 else "PM"
        # 计算12小时制显示值,0点/12点统一显示为12
        display_hour = norm_hour % 12
        display_hour = 12 if display_hour == 0 else display_hour
        # 分钟补前导零为两位格式
        formatted_min = f"{minute:02d}"
        result.append(f"{display_hour}:{formatted_min} {period}")
    return result

该方案测试效果和datetime版本完全一致。

实现边界兼容

  • 所有小时值无论多大都可正常处理,不会出现非法时间报错
  • 边界值符合通用时间规则:0点为12 AM,正午12点为12 PM
  • 分钟值自动补前导零,比如分钟为5时会显示为xx:05格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 12:57:02