求助:SQL中HHMMSS.CCCNNNNNN格式转换与时间差计算
Hey,我来帮你搞定这个时间格式转换和时间差计算的需求!下面分步骤给你详细说明:
1. 把HHMMSS.CCCNNNNNN格式转成带日期的标准时间格式
你的源时间格式是HHMMSS.CCCNNNNNN(比如114643.052303537),要转成yyyy-mm-dd hh:mi:ss.mmm的格式,这里有两个关键点:
- 源格式里没有日期信息,所以你需要提前确定一个固定的日期(比如你例子里的
2018-04-25); - 小数点后的部分我们只需要前三位作为毫秒(
mmm),后面的可以直接忽略。
用Python实现的代码示例:
from datetime import datetime # 你的源时间字符串 source_time = "114643.052303537" # 提前确定的固定日期 fixed_date = "2018-04-25" # 拆分出时分秒部分和毫秒后缀 time_segment, ms_full = source_time.split('.') # 只保留前三位毫秒 ms_short = ms_full[:3] # 拼接成完整的时间字符串,然后转成datetime对象 full_time_str = f"{fixed_date} {time_segment[:2]}:{time_segment[2:4]}:{time_segment[4:6]}.{ms_short}" full_datetime = datetime.strptime(full_time_str, "%Y-%m-%d %H:%M:%S.%f") # 输出格式化后的结果 print(full_datetime.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]) # 结果:2018-04-25 11:46:43.052
2. 去除日期部分,只保留时间
如果只需要hh:mi:ss.mmm的时间部分,有两种简单方式:
# 方式1:直接提取字符串 time_only_str = full_datetime.strftime("%H:%M:%S.%f")[:-3] print(time_only_str) # 结果:11:46:43.052 # 方式2:获取datetime对象的time属性(适合后续计算) time_only_obj = full_datetime.time()
3. 计算时间差
计算时间差需要至少两个时间点,分两种场景处理:
场景A:带日期的时间差(支持跨天)
如果你的时间点可能跨天,一定要用带日期的datetime对象来计算:
# 假设第二个源时间字符串 source_time2 = "124059.573123456" # 同样转换为datetime对象 full_time_str2 = f"{fixed_date} {source_time2[:2]}:{source_time2[2:4]}:{source_time2[4:6]}.{source_time2.split('.')[1][:3]}" full_datetime2 = datetime.strptime(full_time_str2, "%Y-%m-%d %H:%M:%S.%f") # 计算时间差 time_diff = full_datetime2 - full_datetime print(f"时间差:{time_diff}") # 结果:0:54:16.521000 print(f"总秒数:{time_diff.total_seconds()}") # 结果:3256.521
场景B:仅用时间部分计算(同一天内)
如果确定两个时间在同一天,可以把时间转成总秒数再相减:
def time_str_to_total_seconds(time_str): # 把hh:mi:ss.mmm转成总秒数 hours, minutes, sec_ms = time_str.split(':') seconds, ms = sec_ms.split('.') return int(hours)*3600 + int(minutes)*60 + int(seconds) + int(ms)/1000 # 两个时间字符串 time1 = "11:46:43.052" time2 = "12:40:59.573" # 计算时间差 diff_seconds = time_str_to_total_seconds(time2) - time_str_to_total_seconds(time1) print(f"时间差:{diff_seconds}秒") # 结果:3256.521秒
内容的提问来源于stack exchange,提问作者rg1105
相关产品推荐
相关产品推荐

