时间同步QWORD与DD:HH:MM:SS:ss格式时间互转技术问询
自定义时间格式与十六进制QWORD双向转换实现
问题说明
现有代码仅能将DD:HH:MM:SS:ms格式的时间字符串转为毫秒数,但无法保证输出固定9位数字;同时需要补充十六进制QWORD时间戳转时间格式的逻辑,完成双向转换。
完整实现代码
1. 时间字符串转固定9位毫秒数/十六进制QWORD
def time_str_to_ms(time_str): d, h, m, s, ms = time_str.split(':') total_ms = int(d) * 86400000 + int(h) * 3600000 + int(m) * 60000 + int(s) * 1000 + int(ms) # 格式化输出为固定9位,不足补前导零 return f"{total_ms:09d}" def time_str_to_hex_qword(time_str): total_ms = int(time_str_to_ms(time_str)) # 转换为64位十六进制格式(QWORD),补前导零至16位 return f"0x{total_ms:016X}"
2. 十六进制QWORD转时间字符串
def hex_qword_to_time_str(hex_str): # 兼容带/不带0x前缀的十六进制字符串 total_ms = int(hex_str.strip('0x').strip('0X'), 16) # 拆分各时间分量 days = total_ms // 86400000 remaining = total_ms % 86400000 hours = remaining // 3600000 remaining %= 3600000 minutes = remaining // 60000 remaining %= 60000 seconds = remaining // 1000 ms = remaining % 1000 # 格式化标准时间字符串,所有分量补前导零保证格式统一 return f"{days:02d}:{hours:02d}:{minutes:02d}:{seconds:02d}:{ms:03d}"
3. 毫秒数字符串转时间字符串(双向转换补充)
def ms_str_to_time_str(ms_str): total_ms = int(ms_str) days = total_ms // 86400000 remaining = total_ms % 86400000 hours = remaining // 3600000 remaining %= 3600000 minutes = remaining // 60000 remaining %= 60000 seconds = remaining // 1000 ms = remaining % 1000 return f"{days:02d}:{hours:02d}:{minutes:02d}:{seconds:02d}:{ms:03d}"
测试示例
# 时间字符串转9位毫秒数 print(time_str_to_ms('12:8:23:45:100')) # 输出: 1067025100 print(time_str_to_ms('0:0:0:0:50')) # 输出: 000000050 # 时间字符串转十六进制QWORD print(time_str_to_hex_qword('12:8:23:45:100')) # 输出: 0x00000000404B6964 # 十六进制QWORD转时间字符串 print(hex_qword_to_time_str('0x00000000404B6964')) # 输出: 12:08:23:45:100 print(hex_qword_to_time_str('404B6964')) # 输出: 12:08:23:45:100 # 毫秒字符串转时间字符串 print(ms_str_to_time_str('000000050')) # 输出: 00:00:00:00:050
关键细节
- 固定9位毫秒数:通过
f"{total_ms:09d}"自动补前导零,确保输出长度统一 - 十六进制QWORD处理:保留16位十六进制字符,符合64位无符号整数的格式要求
- 时间格式统一:所有时间分量(天、时、分、秒补两位,毫秒补三位)补前导零,保证输出格式一致
内容的提问来源于stack exchange,提问作者nOsfezodus
相关产品推荐
相关产品推荐

