我正在尝试将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战斗,不幸的是我没有选择使用哪个组件。
答案 0 :(得分:14)
这根本不起作用,因为您没有更改底层数据类型。
您有一个DataTable,其列的数据类型为DateTime。
您可以为其指定一个字符串,但它会转换回DateTime。
为什么要将其更改为格式化字符串?您是否只能在需要显示时进行格式化,并在必须显示之前将其作为DateTime处理?
更新:如果您在尝试转换之前检查列的类型也会更好,它可以更快:
if (dataTable.Columns[0].DataType == typeof(DateTime))
{
}
答案 1 :(得分:6)
可能已经确定列数据类型是日期时间,并且在将值保存到那里时将值重新装箱到datetime。
试试这个...... 在数据表上创建一个新列作为TypeOf(String),并将字符串值保存到该列中。复制完所有值后,请删除日期时间列。
答案 2 :(得分:1)
由于列的DataType仍然是DateTime,它将无效,它将把字符串转换回datetime。 我建议在生成API消息时将日期格式化为字符串。如果仍需要为datetime值生成字符串列
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:我没有测试代码,这取决于你。