我是 MySQL 和 C# 的新手。
我将某些值存储在数据类型为 Date 的列中。我不想要时间,只想要存储日期。在使用 phpMyAdmin 或 MySql 命令行查看这些值时,我以以下格式查看它们:
YYYY-MM-DD
但是,当我将这些值检索到我的 Web 应用程序时,它们会以以下格式显示:
YYYY-MM-DD HH:MM (时间具体为12:00)。
为什么会这样?我怎样才能防止这种情况发生?
当您在 C# 中存储您的日期字段时,您使用 DateTime 对象。在此对象中,当您未指定时间部分时,将根据 Globalization 放置一个默认值。
您可以在获取数据时将日期转换为您喜欢的格式,使用date_format()
:
select date_format(datecol, '%Y-%m-%d')
这会将值作为字符串返回。
您不应该从 mysql 检索该值作为字符串。为什么?因为如果您需要对该值执行任何操作,例如添加一天,那么您将需要DateTime
再次将其解析回 a。字符串解析可能很慢,当涉及到日期时,它们很容易出现错误,例如对 mm/dd/yyyy 和 dd/mm/yyyy 格式的误解。
您遇到的问题是 .NET 不仅有一个Date
类型。它只有一个DateTime
类型。所以加载一个 MySQLDATE
类型,将得到一个DateTime
时间部分设置为午夜的。
没有直接的问题,除了如何输出结果。如果您只是在.ToString()
没有任何参数的情况下调用,或者您隐式地将其用作字符串,那么您将获得包含完整日期和时间的结果。您只需要提供一个参数来指示您想要的格式。
没有任何参数,您将获得通用"G"
格式。这在此处的文档中进行了说明。
换句话说:
yourDateTime.ToString() == yourDateTime.ToString("G")
特别是,如果您只想要日期,那么您可能想要这样做:
yourDateTime.ToString("d")
根据您的评论,您应该这样做:
MySQL 查询:
SELECT Gbstartdate FROM TblGbDef
C#:
DateTime gb_start_date = (DateTime) datareader[0];