技术问询:如何将Tick时间及Excel浮点时间转为Python标准HH:MM:SS格式
问题解决方案:两种Python时间格式转换方法
# 1. 将Tick时间转换为HH:MM:SS格式
首先明确:通常我们说的Tick(比如.NET框架中的定义)是以100纳秒为单位的时间戳,也就是1 Tick = 1e-7秒。要转换成HH:MM:SS格式,可以用datetime.timedelta来处理时间差,再格式化输出:
import datetime def tick_to_hhmmss(tick): # 将Tick转换为总秒数 total_seconds = tick / 10_000_000 # 用timedelta处理时间差,自动计算时分秒 time_delta = datetime.timedelta(seconds=total_seconds) # 去掉毫秒部分,保留HH:MM:SS格式 return str(time_delta).split('.')[0] # 测试示例:对应17:30:01的Tick值 sample_tick = 637956378010000000 print(tick_to_hhmmss(sample_tick)) # 输出: 17:30:01
这个方法的好处是即使Tick对应的时间超过24小时,也能正确输出(比如30:15:45这种格式),不需要额外处理。
# 2. Excel浮点型时间转换为HH:MM:SS
Excel的浮点时间规则是:1.0代表一整天(24小时),所以0.7291782407407408就是一天的72.9178%,对应17:30:01。这里有两种简洁的实现方式:
方法一:直接计算时分秒
适合只需要时分秒、不想引入日期处理的场景:
def excel_float_to_hhmmss(excel_time): # 计算总秒数:1天=24*3600秒 total_seconds = excel_time * 24 * 3600 # 拆分小时、分钟、秒 hours = int(total_seconds // 3600) remaining = total_seconds % 3600 minutes = int(remaining // 60) seconds = int(round(remaining % 60)) # 四舍五入到整数秒 # 格式化补零,确保两位数字 return f"{hours:02d}:{minutes:02d}:{seconds:02d}" # 测试示例 sample_excel_time = 0.7291782407407408 print(excel_float_to_hhmmss(sample_excel_time)) # 输出: 17:30:01
方法二:利用datetime格式化
如果需要同时处理日期(比如Excel时间大于1的情况,代表多天后的时间),这种方法更灵活:
from datetime import datetime, timedelta def excel_float_to_hhmmss(excel_time): # Excel的时间基准是1899-12-30(因为历史闰年bug,不是1900-01-01) base_datetime = datetime(1899, 12, 30) # 计算目标时间 target_datetime = base_datetime + timedelta(days=excel_time) # 提取时分秒格式 return target_datetime.strftime("%H:%M:%S") # 测试同样的输入 print(excel_float_to_hhmmss(sample_excel_time)) # 输出: 17:30:01
这个方法即使输入是1.7291782407407408(代表一天后的17:30:01),也能正确输出17:30:01。
内容的提问来源于stack exchange,提问作者Riggun
相关产品推荐
相关产品推荐

