从 C# 到 MySQL 的 DateTime:不完整的存储
Posted
技术标签:
【中文标题】从 C# 到 MySQL 的 DateTime:不完整的存储【英文标题】:DateTime from C# to MySQL: incomplete storage 【发布时间】:2011-08-11 01:02:37 【问题描述】:我正在使用DateTime
对象来创建监控应用程序。
其原理是每次用户启动特定应用程序时,当前日期和时间都会保存在数据库中。然后在监控应用程序中,我从数据库中获取这个日期字段并显示它。
今天进行测试时,我尝试启动应用程序:DateTime.Now
已存储(即,在法国文化中,22/04/11 17:09:50)。
当我启动监控应用程序时,我从数据库中得到的是 22/04/11 00:00:00
没有保存确切时间有什么原因吗?
DB 中的列当然是 Date 列。
一些代码:
保存日期:
command = new mysqlCommand(_updateDateCommand, connection);
command.Parameters.AddWithValue("?Template", app);
command.Parameters.AddWithValue("?Date", DateTime.Now);
command.Parameters.AddWithValue("?Id", u.Id);
if (command.ExecuteNonQuery() != 0) return true;
检索数据:
object date = reader.GetValue(4);
if (date == System.DBNull.Value)
tempUserApp.DateLastUsed = DateTime.MinValue;
else
tempUserApp.DateLastUsed = (DateTime)date;
我确定问题出在存储过程中,因为使用 Toad 等工具可视化数据会在日期字段中显示 22/04/11 00:00:00
。
更新命令:
private readonly string _updateDateCommand =
"UPDATE userapplications " +
"JOIN template t ON t.Name = ?Template " +
"SET DateUsed=?Date WHERE `User Id`=?Id AND `Template Id`=t.Id";
MySQL 日期有什么特殊格式吗?
我碰到this *** question 并尝试了提出的解决方案,它也不起作用
有什么想法吗?
【问题讨论】:
你能显示 _updateCommand 的内容吗? 【参考方案1】:检查数据库中的数据类型,在我看来你的字段是日期类型, 所以
【讨论】:
【参考方案2】:数据库列应该是日期时间,而不是日期。看看Docs。
关于日期:
当您需要时使用 DATE 类型 只有日期值,没有时间 部分。 MySQL 检索并显示 'YYYY-MM-DD' 格式的 DATE 值。 支持的范围是“1000-01-01”到 '9999-12-31'。
关于日期时间:
当您使用 DATETIME 类型时 需要同时包含日期和 时间信息。 MySQL 检索和 显示 DATETIME 值 'YYYY-MM-DD HH:MM:SS' 格式。这 支持的范围是 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。
像 dd/mm/yyyy 00:00:00 这样获取日期返回具有误导性,它只是被工具格式化为默认日期/日期时间格式。您真正需要的是将 DB 列设置为 DateTime。
【讨论】:
以上是关于从 C# 到 MySQL 的 DateTime:不完整的存储的主要内容,如果未能解决你的问题,请参考以下文章
如何从 MySql 数据库中获取日期到 C# DateTime 对象?
MySQL DateTime 的 C# 输入字符串格式不正确