【问题标题】:How to set only Date in DataTable Column of Type DateTime WEB如何在 DateTime WEB 类型的 DataTable 列中仅设置日期
【发布时间】:2011-06-02 06:57:47
【问题描述】:

大家好,

我的问题很简单,但请记住,我没有将它绑定到任何网格或任何 ASP.NET 控件我有自己的网格控件,我想将其保留为 DateTime 列以进行排序。

我正在创建列类型为 DateTime 的 DataTable。

DataTable data = new DataTable();
data.Columns.Add("Invoice Date", typeof(DateTime));
DataRow dr = data.NewRow();
dr[0] = DateTime.Now;

//Adding filled row to the DataTable object
dataTable.Rows.Add(dr);

当值显示在 ASP.NET 页面上时 它是这样显示的:

"2/28/2011 12:00:00 AM"

我有 2 个这样的列,在 1 个列中我想只显示日期,在其他列中我想将日期显示为“2011 年 12 月”,如果我使用带有字符串类型的 DataColumn,则可以实现这些格式,但在这种情况下排序工作不正常。

请帮忙。

谢谢。

【问题讨论】:

  • 各位记住,我想在 DataTable 对象中保存日期时对其进行格式化

标签: c# datetime formatting datatable


【解决方案1】:

首先只取日期部分

dr[0] = DateTime.Now.Date;

二次利用

DateTime.ToShortDateString

    <asp:Label ID="Label1" runat="server" Text='<%# 
((DateTime)Eval("ItemValue")).ToShortDateString() %>'></asp:Label>

绑定值的方法

编辑

不确定,但您可以查看此答案可能会帮助您解决问题:Is it possible to format a date column of a datatable?

【讨论】:

  • 总是把“12:00:00 AM”放在数据中没关系。
  • @KhanZeeshan - 绑定使用 ToShortDateString 函数时尝试第二个选项
  • 当我用我需要的格式格式化值时,它会给出正确的格式,但只要在 DataTable 中添加行“12:00:00 AM”就会附加到列中。
  • 谢谢老兄,但我希望我的 DataTable 保留 Date 只是因为我在其他几个地方也在使用该 DataTable 并且我不想仅仅针对这种情况进行黑客攻击。
  • 我试过了,但没有运气,我什至使用 ToString("MM/dd/yyyy") 分配了日期,但只要在行对象“12:00:00”中设置了它的值AM”添加到它
【解决方案2】:

您似乎混淆了您的概念。数据库和其中的表的目的是存储数据——而不是格式化它。这是一个具体如何存储的实现细节。就像您不关心数据表是使用 UTF-8 还是 UTF-16 来存储您的字符串一样,您也不应该关心它存储日期的格式。在这种情况下,它几乎可以肯定是以纳秒数的形式存储的从 0001 年 1 月 1 日午夜 12:00 开始。也就是说,如果你真的在数据库的二进制格式中进行挖掘,你会发现那些纳秒。

现在,您的 UI 层(即 ASP.NET 页面)的目的是显示数据。 这里是您做出任何格式决定的地方。

一个 UI 层是您用来查看数据库的任何软件。该软件正在将一些纳秒数(即内部存储格式)转换为字符串“2/28/2011 12:00:00 AM”。这样做的原因是因为这是显示时间点的默认格式。

您正在编码的 UI 层——可以控制的那个层——现在需要选择如何将这些纳秒转换为文本。如果它使用默认值,它将显示“2/28/2011 12:00:00 AM”。但是,如果您不想要默认值,则需要实际指定它。 Pranay Rana 的回答给出了如何做到这一点的想法。 这就是你的 UI 层的重点

【讨论】:

  • 我认为您没有得到我的问题,或者可能是我没有正确解释它。我可以格式化从数据库中检索到的日期值,但是在对记录进行一些计算之后,我将其添加到 .NET 的 DataTable 类对象中,在将其添加到 DataTable 对象之前,只要在 DataTable 对象时间中添加值,值的格式就正确了添加的也是我不想要的。
  • 数据表没有“仅日期”或“仅时间”的概念。它存储 自 0001 年 1 月 1 日起的纳秒。它不存储日期或时间。您的软件正在显示一个包含日期和时间的字符串,因为这是自 0001 年 1 月 1 日以来显示纳秒的默认格式
  • 为了更清楚:如果你说dr[0] = DateTime.Today,数据表会显示“哦,有人给了我一个 .NET 日期。我如何存储这些......啊,我会去计算取出自 0001 年 1 月 1 日以来该 .NET 日期的纳秒数,并将其存储。”这不是“不正确的”;相反,是您对 UI 层与存储格式的混淆导致您认为它是。
  • 所以这意味着如果我只想显示日期,我应该将该 Datacolumn 转换为字符串类型?
  • 不,因为您只想显示日期,您应该在 UI 层中执行 显示 逻辑。 这就是它的用途。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2021-10-10
  • 2020-01-23
  • 2016-07-22
  • 1970-01-01
  • 2014-12-11
相关资源
最近更新 更多