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