仅从DateTime列asp.net中提取日期

时间:2011-11-04 14:29:17

标签: c# asp.net sql

在SqlDataSource中,我指定了一个检索日期的SelectCommand:

SelectCommand="SELECT [training_id], Convert(varchar(14),[trainingDate],101) FROM [tbl_training]"

但是DateGenerated给了我一个像11/04/2011 12:00:00 AM的值。如何使用SelectCommand仅提取11/25/2011?

任何帮助都将不胜感激。

7 个答案:

答案 0 :(得分:3)

作为DateTime检索的值将始终包含时间,因为这是定义类型的方式。你可以:

  • 使用Date属性确保在午夜获得DateTime值(例如,为了进行相等计算)
  • 在格式化用户时忽略时间部分。要将DateTime格式化为仅以文化敏感方式显示日期,您应使用“d”或“D”standard date/time format specifier。不要硬编码自定义日期/时间格式字符串,除非您确定这是您的用户期望的。 (11/4/2011对我来说就像4月11日那样......)

您还想如何使用该值?虽然我认为它是fundamental flaw that DateTime is used for several different things,但如果你小心的话,你应该可以解决它。

答案 1 :(得分:2)

请勿指定尺寸,请尝试

Convert(varchar,[trainingDate],101)

如果你今天在SQL Server上运行它,你会得到:

Declare @datey datetime
Set @datey = GETDATE()
Select CONVERT(varchar, @datey, 101) as [DateOnly]

结果: 11/04/2011

在SQL Server Denali中值得注意的是,所有这些用于格式化的幻数都会随着新的FORMAT()函数而消失

答案 2 :(得分:1)

如果要在asp网格中显示它,可以在boundfield上执行此操作。

<asp:BoundField DataField="datafield" HeaderText="displayText" DataFormatString="{0:MM/dd/yyyy}"  HtmlEncode="false"/>

但如果你想在选择查询中

Select convert(varchar,trainingDate, 101) as trainingDate

答案 3 :(得分:1)

要仅获取日期部分,您可以执行以下操作:

DateTime dt = DateTime.Now;
dt = dt.Date;

如果您要显示日期,则可以使用MM/dd/yyyy格式。如果只想从SQL Server返回日期部分,请使用格式111而不是101

答案 4 :(得分:1)

string today_date = DateTime.Now.Date.ToShortDateString();

将鼠标悬停在今天的日期,您将获得日期部分。

答案 5 :(得分:0)

答案 6 :(得分:0)

如果是Sql Server 2008,您可以强制转换为内置date type

CAST(trainingDate as DATE)

最终查询:

SELECT training_id, CAST(trainingDate as DATE) 
FROM tbl_training