我有一个表格,其中我存储日期(例如2015/10/10),列为date
数据类型,而不是datetime
。但是当我执行一个查询选择日期值并将其转换为C#中的ExecuteScalar()
字符串以在TextBox上显示它时,我得到了日期和时间。
这是我的疑问:
SqlCommand cmd = new SqlCommand("select guaranty_date from telephone where ID_telephone = '"vaue"' ");
Text1Box.Text = cmd.ExcecuteScalar().ToString();
但我在文本框中收到了此结果:10/10/2015 12:00:00 a. m.
为什么?
答案 0 :(得分:2)
日期数据类型没有时间。问题是c#中DateTime
的默认字符串表示形式
试试这个:
Text1Box.Text = ((DateTime)cmd.ExcecuteScalar()).ToString("dd/MM/yyyy");
答案 1 :(得分:2)
这里没有问题或错误。 .NET没有仅限日期的类型,它只有DateTime和DateTimeOffset。你可以说这个遗漏几乎是一个框架bug,实际上有一个OSS project正在进行,旨在将这些类型添加到.NET。
如果只想渲染DateTime的日期部分,则需要指定适当的格式字符串,例如d作为特定于语言环境的短日期模式:
DateTime result=cmd.ExcecuteScalar();
Text1Box.Text = result.ToString("d");
您可以在Standard Date and Time formats中查看各种标准日期格式。
如果您想使用特定格式,无论用户/线程的区域设置是什么,您都需要使用custom format string,例如:
Text1Box.Text = result.ToString("yyyy/MM/dd",CultureInfo.InvariantCulture);
我通过CultureInfo.InvariantCulture
的原因是/
是日期分隔符占位符。在某些文化中(例如德语),这是-
或.
。提到这个潜在的陷阱几乎成了SO传统。
答案 2 :(得分:0)
没有与SQL Server date
类型完全匹配的CLR类型。 SQL Server date
类型映射到CLR DateTime
类型。 DateTime
类型表示一个时间点,而不仅仅是日期,因此当您调用DateTime.ToString()时,它还会显示时间部分。但是如果你知道时间部分是无关紧要的,你可以使用DateTime.ToString()方法的另一个重载。
答案 3 :(得分:0)
正如其他人所说,C#不包含“仅限日期”的数据类型。如果这仅用于显示值,您可以更改查询以返回按您希望的方式格式化的日期:
SqlCommand cmd = new SqlCommand("select convert(char(10),guaranty_date,103) as guaranty_date from telephone where ID_telephone = '"vaue"' ");
Text1Box.Text = cmd.ExcecuteScalar().ToString();
在MSDN上,您可以找到可能的日期格式