【问题标题】:Date type in MySqlMySql 中的日期类型
【发布时间】:2013-09-04 19:39:25
【问题描述】:

我是 MySQL 和 C# 的新手。

我将某些值存储在数据类型为 Date 的列中。我不想要时间,只想要存储日期。 在使用 phpMyAdmin 或 MySql 命令行查看这些值时,我看到它们的格式为:

YYYY-MM-DD

但是,当我将这些值检索到我的 Web 应用程序时,它们会以以下格式显示:

YYYY-MM-DD HH:MM(具体时间是12:00)。

为什么会这样?我怎样才能防止这种情况发生?

【问题讨论】:

标签: c# mysql date


【解决方案1】:

当您在 C# 中存储您的日期字段时,您使用 DateTime 对象。在这个对象中,当你不指定时间部分时,将根据 Globalization 放置一个默认值。

您可以研究 DateTime 的工作原理here

【讨论】:

  • 但我将检索到的日期类型值转换为字符串(使用 toString()),然后打印该字符串。那么为什么时间会出现在结果字符串中?
  • @SinghSiddharth 。 . .当您调用 toString() 时,您已使用 C#,并且该值已被视为日期时间。
【解决方案2】:

您可以在获取数据时将日期转换为您喜欢的格式,使用date_format():

select date_format(datecol, '%Y-%m-%d')

这会将值作为字符串返回。

【讨论】:

  • 谢谢!这对我有用。但我认为下次我会使用 DATETIME 而不是 DATE .. 麻烦少得多。
【解决方案3】:

您不应该从 mysql 中将值作为字符串检索。为什么?因为如果您需要对该值执行任何操作,例如添加一天,那么您将需要再次将其解析回 DateTime。字符串解析可能很慢,当涉及到日期时,它们很容易出现错误,例如对 mm/dd/yyyy 和 dd/mm/yyyy 格式的误解。

您遇到的问题是 .NET 不只有 Date 类型。它只有一个DateTime 类型。所以加载一个 MySQL DATE 类型,将会得到一个DateTime,时间部分设置为午夜。

除了如何输出结果外,没有直接的问题。如果您只是在没有任何参数的情况下调用.ToString(),或者您将其隐式用作字符串,那么您将获得包含完整日期和时间的结果。您只需要提供一个参数来指示您想要的格式。

没有任何参数,您将获得通用"G" 格式。这在文档here 中有解释。

换句话说:

yourDateTime.ToString() == yourDateTime.ToString("G")

您可以阅读所有其他可用格式,here 和 here。

特别是,如果您只想要日期,那么您可能想要这样做:

yourDateTime.ToString("d")

根据您的 cmets,您应该这样做:

MySQL 查询:

SELECT Gbstartdate FROM TblGbDef

C#:

DateTime gb_start_date = (DateTime) datareader[0];

【讨论】:

  • 好的,谢谢!我也会尝试这一切。这就是我现在完成工作的方式: My Sql 查询 : SELECT date_format(Gbstartdate, '%Y-%m-%d') FROM TblGbDef DateTime gb_start_date = DateTime.ParseExact(datareader[0].ToString(), "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); TimeSpan days_elapsed_ts = current_date - gb_start_date; @987654337 @
猜你喜欢
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 2013-06-06
  • 2013-02-06
  • 1970-01-01
相关资源
最近更新 更多