如何在ASP .NET BoundField(DataFormatString)中修复日期格式?

ice*_*n31 27 .net c# asp.net

我有一个动态的BoundField(对于DetailsView),代码如下:

BoundField bf1 = new BoundField();
bf1.DataField = "CreateDate";
bf1.DataFormatString = "{0:dd/MM/yyyy}";
bf1.HtmlEncode = false;
bf1.HeaderText = "Sample Header 2";

dv.Fields.Add(bf1);
Run Code Online (Sandbox Code Playgroud)

但不知何故,它仍然显示错误的格式:2013-04-29T18:15:20.270.

我可以用任何方式解决这个问题,以显示"29/04/2013"​​吗?谢谢你的帮助.

Bor*_*ode 40

您可以将dataformatstring="{0:M-dd-yyyy}"属性" 添加到绑定字段,如下所示:

<asp:BoundField DataField="Date" HeaderText="Date" DataFormatString="{0:dd-M-yyyy}" />
Run Code Online (Sandbox Code Playgroud)

source:使用dataformatstring格式化datetime


Son*_*nül 13

格式化取决于服务器的文化设置.如果您使用的en-US文化,你可以使用短日期模式一样{0:d}

例如,它格式化6/15/2009 1:45:306/15/2009

您可以查看更多格式 BoundField.DataFormatString


Shi*_*ion 8

确定数据源列的数据类型"CreateDate".确保它生成一个实际的日期时间字段,而不是varchar.如果您的数据源是存储过程,则完全有可能正在处理CreateDate以生成varchar以格式化日期,如下所示:

SELECT CONVERT(varchar,TableName.CreateDate,126) AS CreateDate 
FROM TableName ...
Run Code Online (Sandbox Code Playgroud)

像这样使用CONVERT通常是为了使查询结果满足其他代码处理这些结果的要求.Style 126是ISO 8601格式,是适用于任何语言设置的国际标准.我不知道你的行业是什么,但这可能是故意的.你不想搞砸它.此样式(126)以"2013-04-29T18:15:20.270"的形式生成日期的字符串表示,就像您报告的那样!但是,如果CreateDate已经以这种方式处理,那么你将无法让你的bf1.DataFormatString显示"29/04/2013"​​.您必须首先在原始SQL数据源中以datetime类型列开始,以便bf1正确使用它.因此,只需将其添加到数据源查询中,并使用其他名称(如CreateDate2)调用它,以免干扰其他任何已依赖于CreateDate的代码,如下所示:

SELECT CONVERT(varchar,TableName.CreateDate,126) AS CreateDate, 
       TableName.CreateDate AS CreateDate2
FROM TableName ...
Run Code Online (Sandbox Code Playgroud)

然后,在您的代码中,您必须将bf1绑定到"CreateDate2"而不是原始的"CreateDate",如下所示:

BoundField bf1 = new BoundField();
bf1.DataField = "CreateDate2";
bf1.DataFormatString = "{0:dd/MM/yyyy}";
bf1.HtmlEncode = false;
bf1.HeaderText = "Sample Header 2";

dv.Fields.Add(bf1);
Run Code Online (Sandbox Code Playgroud)

瞧!您的日期现在应显示"29/04/2013"​​!


小智 6

我有同样的问题,只需要显示短期(没有时间),而且需要有多语言设置,所以取决于语言,显示dd-mm-yyyy或mm-dd-yyyy.

最后使用DataFormatString="{0:d},一切正常,只显示文化格式的日期.