4

我正在尝试将 DataTable 中的所有 DateTime 值转换为字符串。这是我使用的方法:

private static void ConvertDateTimesToStrings(DataTable dataTable)
{
    if (dataTable == null)
    {
        return;
    }

    for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++ )
    {
        for (int i = 0; i < dataTable.Columns.Count; i++)
        {
            DateTime dateTime;
            try
            {
                dateTime = (DateTime)dataTable.Rows[rowIndex][i];
            }
            catch (InvalidCastException)
            {
                continue;
            }
            dataTable.Rows[rowIndex][i] = dateTime.ToString("dd.MM.yyyy hh:mm:ss");
        }
    }
}

在这条线工作之后:

dataTable.Rows[rowIndex][i] = dateTime.ToString("dd.MM.yyyy hh:mm:ss");

我检查了 dataTable.Rows[rowIndex][i] 的值,发现它仍然是 DateTime,而不是字符串。为什么会发生这种情况,我该如何解决?

编辑:我正在尝试这样做,因为我正在与 api 作斗争,不幸的是我无法选择使用哪个组件。

4

3 回答 3

14

这根本行不通,因为您没有更改底层数据类型。

您有一个 DataTable,其中有一列的数据类型为 DateTime。

您可以为其分配一个字符串,但它会转换回日期时间。

为什么要将其更改为格式化字符串?难道你不能只在需要显示它时格式化,并作为 DateTime 处理,直到你必须显示它?

更新:如果您在尝试转换之前检查列的类型也会更好,它可以更快:

if (dataTable.Columns[0].DataType == typeof(DateTime))
{
}
于 2008-10-15T11:41:16.227 回答
6

它可能已确定列数据类型是日期时间,并且在您将值保存回其中时将值重新装箱为日期时间。

试试这个... 在数据表上创建一个新列作为 TypeOf(String),并将字符串值保存到该列中。复制所有值后,删除日期时间列。

于 2008-10-15T11:41:27.147 回答
1

它不起作用,因为该列的 DataType 仍然是 DateTime,它会将字符串转换回 datetime。我建议在生成 API 消息时将日期格式化为字符串。如果您仍需要为日期时间值生成字符串列

foreach (DataColumn column in dataTable.Columns) {
  if (column.DataType == typeof(DateTime)) {
    dataTable.Columns.Add(column.ColumnName + "_string", typeof(string));
  }
}

foreach (DataRow row in dataTable.Rows) {
   foreach (DataColumn column in dataTable.Columns) {
     if (column.DataType == typeof(DateTime)) {
       row[column.ColumnName + "_string"] = row[column.ColumnName].ToString("dd.MM.yyyy hh:mm:ss");
     }
   }
}

然后您可以删除所有 DateTime 列或使用 dataTable.Select() 仅获取您需要的列。PS:我没有测试代码,这取决于你。

于 2008-10-15T12:20:39.033 回答