Google Sheets如何将文本格式时长转换为整数小时值
文本类时长数据转整数小时的实现方案
直接按空格拆分字符串之所以会出现维度匹配错位,核心原因是拆分后的片段没有和时间单位绑定,一旦原始文本缺失时/分/秒某一个维度,数组索引和维度的对应关系就会失效。最稳妥的实现方式是通过正则直接匹配「数值+对应单位」的片段,不依赖固定的字段顺序和完整性,具体操作步骤如下:
- 编写匹配规则
(\d+)\s*(h|min|s),可以自动抓取文本中所有「数字+可选空格+时间单位」的片段,不管原始文本是19min 30s这类缺小时的格式、2h 15s这类缺分钟的格式,还是3h这类单单位格式,都能准确识别,不会出现错位 - 初始化总秒数计数为0,遍历所有匹配到的结果,按单位做换算累加:
- 单位为
h时,对应数值乘以3600后累加到总秒数 - 单位为
min时,对应数值乘以60后累加到总秒数 - 单位为
s时,对应数值直接累加到总秒数
- 单位为
- 把累加得到的总秒数除以3600,按业务需求选择向下取整/四舍五入,就能得到以小时为单位的整数结果
以Python实现为例,可直接运行的参考代码如下:
import re def text_duration_to_int_hour(duration_text): total_sec = 0 # 提取所有数值+单位的组合 time_parts = re.findall(r'(\d+)\s*(h|min|s)', duration_text) for num, unit in time_parts: num = int(num) if unit == 'h': total_sec += num * 3600 elif unit == 'min': total_sec += num * 60 elif unit == 's': total_sec += num # 向下取整用//,需要四舍五入替换为round(total_sec / 3600)即可 return total_sec // 3600 # 测试用例 print(text_duration_to_int_hour("19min 30s")) # 输出0,时长不足1小时 print(text_duration_to_int_hour("1h 50min")) # 输出1 print(text_duration_to_int_hour("3h 40min 25s"))# 输出3
内容的提问来源于stack exchange,提问作者Whitney
相关产品推荐
相关产品推荐

