C#Datarow项目被忽略的DateTime格式

时间:2016-02-18 18:27:57

标签: c# sql .net datetime

我正在使用SQL SP的结果填充DataTable。其中一列是DateTime类型。当我尝试格式化DateTime值时,它似乎被忽略了。

例如:

foreach (DataRow row in sourceTable.Rows)
            {
                row["DateOfActivity"] = Convert.ToString(((DateTime)row["DateOfActivity"]).ToString("yyyy-MM-dd"));
                Console.WriteLine(row["DateOfActivity"]);
            }

结果:

2/17/2016 12:00:00 AM

如何确保保留DateTime格式?

2 个答案:

答案 0 :(得分:2)

在数据库中,列具有特定类型。当您分配回row["DateOfActivity"]时,您将分配到DateTime值。将其写回控制台将为您提供默认的.ToString()电话。

解决方案是等待格式化输出,直到您实际向用户显示它。完全摆脱循环内的第一行,让第二行看起来像这样:

Console.WriteLine(row["DateOfActivity"].ToString("yyyy-MM-dd"));

答案 1 :(得分:0)

您的问题中不存在row["DateOfActivity"]列的类型定义,但我假设它被定义为DateTime类型。此类型定义存储原始日期/时间值,不带格式。

来自MSDN:

  

在内部,所有DateTime值都表示为自0001年1月1日午夜12:00:00起经过的刻度数(100纳秒间隔的数量)。实际的DateTime值与中的方式无关。当在用户界面元素中显示或写入文件时,该值会出现。 DateTime值的出现是格式化操作的结果。格式化是将值转换为字符串表示形式的过程。

     

由于日期和时间值的出现取决于诸如文化,国际标准,应用程序要求和个人偏好等因素,因此DateTime结构通过其ToString的重载在格式化日期和时间值方面提供了极大的灵活性。方法。默认的DateTime.ToString()方法使用当前区域性的短日期和长时间模式返回日期和时间值的字符串表示形式。以下示例使用默认的DateTime.ToString()方法,使用en-US文化的短日期和长时间模式显示日期和时间,en-US文化是运行该示例的计算机上的当前文化。

输出时,您应该格式化DateTime类型的值。如果要在DataTable中存储此值的格式化版本,则需要将该列定义为字符串,然后存储格式化的值。

有关详情,请参阅DateTime类型的this链接。