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

求助: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:22:22