0

我正在将 ASP.NET3.5 与 C# 2008 一起使用,我是新手LINQ。我有一个dataset要获取的表数据,其中包含一个类型为 的列datetime。现在,我想将此日期转换为 24 小时格式,仅包含日期和小时、分钟和秒。存储的日期时间为 12 小时格式。我努力了

ds.Tables[0].AsEnumerable().ToList().ForEach(i => i["CreatedDate"] = Convert.ToDateTime(i["CreatedDate"].ToString()).ToString("MM/dd/yyyy HH:mm:ss"));

然后我将datasettogridview作为datasource.

它没有给出任何例外,但它没有将日期转换为 24 小时格式。

任何人都可以帮忙吗?等待您的宝贵回复..

谢谢你,开发

4

2 回答 2

1

“存储的日期时间为 12 小时格式”不,代表 a 的字符串DateTime已格式化,aDateTime永远没有格式。DateTime存储 a时使用DateTimea ,string仅在要显示时使用 a 。如果它已经DateTime在您的 a 中DataSet,则无需将其转换为 astring并转换回DateTimevia Convert.ToDateTime(i["CreatedDate"].ToString())

这段代码很乱,抱歉:

ds.Tables[0].AsEnumerable().ToList().ForEach(i => i["CreatedDate"] = Convert.ToDateTime(i["CreatedDate"].ToString()).ToString("MM/dd/yyyy HH:mm:ss"));

为什么?

  • 您正在将 a 转换DataTable为 aList<DataRow>尽管 aDataTable已经是内存中的对象。那是没有意义和低效的
  • 您将 a 存储DateTime为字符串,您可以将 a 用作 a中的DateTime类型,当您想要显示值时,在最后阶段将其转换为字符串DataColumnDataTable
  • 您正在将“字符串日期”转换为日期时间,用于ToString将其格式化为字符串,然后再次将其转换为日期时间。这将使用默认值ToString(使用您的当前文化)来显示它,这就是您没有获得所需格式的原因

因此,假设这确实是一个字符串并且您不想/可以将其更改为DataTime,这可能会起作用:

var query = ds.Tables[0].AsEnumerable()
    .Select(r => Date.Parse(r.Field<String>("CreatedDate")).ToString("MM/dd/yyyy HH:mm:ss"));
gridView1.DataSource = query;
gridView1.DataBind();

请注意,您还可以使用DataFormatStringGridView 的属性BoundField

<asp:GridView ID="GridView1" runat="server" 
        AutoGenerateColumns="False" >
        <Columns>
            <asp:BoundField DataField="CreatedDate" 
                HeaderText="Created-Date" 
                SortExpression="CreatedDate" 
                DataFormatString="MM/dd/yyyy HH:mm:ss" />

但是随后您需要将其存储为/将其转换为DateTime表中的 a 并将其用作DataSource.

于 2013-02-04T09:58:05.390 回答
-1

我希望它会起作用。你可以试试这个。

 ds.Tables[0].AsEnumerable().ToList().ForEach(i => i["CreatedDate"] =    Convert.ToDateTime(i["CreatedDate"].ToString()).ToString("HH:mm:ss"));
于 2013-02-04T09:57:12.280 回答