我有这段代码
StringBuilder sb = new StringBuilder();
var columnNames = dt.Columns
.Cast<DataColumn>()
.Select(column => "\"" + column.ColumnName.Replace("\"", "\"\"") + "\"")
.ToArray();
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt.Rows)
{
var fields = row.ItemArray
.Select(field => "\"" + field.ToString().Replace("\"", "\"\"") + "\"")
.ToArray();
sb.AppendLine(string.Join(",", fields));
}
row[1]
和row[2]
中的这些是日期,我希望它们采用这种格式
string.Format("{0:yyyy-MM-dd HH:mm:ss.fffffff}", row[1]);
我该怎么做?
答案 0 :(得分:5)
有Select的重载,它将值和索引的函数作为参数;您可以使用它根据索引应用不同的格式。以下示例显示了格式化值的函数。此功能用于代码中的选择:
private string FormatStringByIndex(object field, int index)
{
if (index > 0 && index < 3)
return string.Format("{0:yyyy-MM-dd HH:mm:ss.fffffff}", field);}
else
return field.ToString();
}
// ...
StringBuilder sb = new StringBuilder();
var columnNames = dt.Columns.Cast<DataColumn>().Select(column => "\"" + column.ColumnName.Replace("\"", "\"\"") + "\"").ToArray();
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt.Rows)
{
var fields = row.ItemArray.Select((field, index) => "\"" + FormatStringByIndex(field, index).Replace("\"", "\"\"") + "\"").ToArray();
sb.AppendLine(string.Join(",", fields));
}
答案 1 :(得分:0)
如果列包含DateTime
类型,则只需执行此操作。
var formatted = ((DateTime)row[1]).ToString("yyyy-MM-dd HH:mm:ss.fffffff");
否则您需要先将其转换为DateTime
,然后再调用DateTime.ToString(format)
。
答案 2 :(得分:0)
在foreach
循环中,您可以执行以下操作:
var dateFormat = "{0:yyyy-MM-dd HH:mm:ss.fffffff}";
var dateColumns = new[] { 1, 2 };
var fields = itemArray.Select((e, i) =>
{
if (dateColumns.Contains(i))
return String.Format(dateFormat, e);
return e.ToString();
});