C#读取MySQL datetime(3)字段时时间戳被截断?求原因
问题原因与解决方法
核心原因
你遇到的毫秒截断问题,本质不是C#代码没读取到毫秒,而是默认的ToString()方法不会输出DateTime对象的毫秒部分。MySQL的datetime(3)字段存储的毫秒信息已经被正确读取到了C#的DateTime对象中,但无参数的ToString()使用的是默认格式("G"通用格式),只会显示到秒级。
验证方式
你可以在代码里加一行调试代码,确认DateTime对象确实包含毫秒:
if (reader.Read()) { DateTime loggedAt = reader.GetDateTime(0); Console.WriteLine(loggedAt.Millisecond); // 会输出508,证明毫秒已读取 }
解决方法
只需要在输出时指定包含毫秒的格式字符串即可:
方法1:直接格式化输出
修改输出代码为:
if (reader.Read()) { Console.WriteLine(reader.GetDateTime(0).ToString("yyyy-MM-dd HH:mm:ss.fff")); }
方法2:使用字符串插值格式化
如果需要更灵活的格式,也可以先获取DateTime对象再格式化:
if (reader.Read()) { DateTime loggedAt = (DateTime)reader["logged_at"]; Console.WriteLine($"{loggedAt:yyyy-MM-dd HH:mm:ss.fff}"); }
额外注意
如果使用的是较旧的MySQL驱动(如MySQL.Data),确保驱动版本支持datetime(n)类型的毫秒读取,但目前主流驱动(包括MySqlConnector)都能正确处理这类字段,核心问题还是输出格式的问题。
内容的提问来源于stack exchange,提问作者user5405648
相关产品推荐
相关产品推荐

