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

如何在C#中通过MySqlDataReader正确获取MySQL Time列的值

解决MySQL TIME类型读取格式不匹配问题

MySQL的TIME类型支持-838:59:59至838:59:59的时间间隔范围,但用MySqlDataReader.GetTimeSpan()读取时,会把超过24小时的数值拆分成天数+小时的格式(比如-88:34:22会变成-3.16:34:22),不符合构建插入语句需要的TIME字符串格式。

两种可行解决方案

方案1:直接读取原始字符串(最简单)

跳过TimeSpan转换,直接读取驱动返回的原始TIME格式字符串:

"time" => $"'{reader.GetString(i)}'",

这种方式无需额外计算,直接拿到符合MySQL要求的格式,比如'-88:34:22'。

方案2:手动转换TimeSpan为MySQL TIME格式

如果需要自己处理时间间隔的数值,可以通过计算总小时数来拼接格式:

"time" => 
{
    var ts = reader.GetTimeSpan(i);
    // 计算总小时数:天数*24 + 小时数,兼容正负值
    var totalHours = ts.Days * 24 + ts.Hours;
    // 拼接成带微秒的TIME格式,若不需要微秒可去掉最后部分
    var timeStr = $"{Math.Abs(totalHours):D2}:{ts.Minutes:D2}:{ts.Seconds:D2}.{ts.Milliseconds * 1000}";
    // 处理负数符号
    if (totalHours < 0)
    {
        timeStr = $"-{timeStr}";
    }
    return $"'{timeStr}'";
},

注意事项

  • MySQL的TIME类型存储的是时间间隔,不是一天内的时间点,所以.NET的TimeSpan默认格式化会拆分天数,这是两者类型设计的差异导致的。
  • 方案1更推荐,因为驱动已经帮我们做好了格式转换,避免手动计算出错。

内容的提问来源于stack exchange,提问作者Luctus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:57:36