DataTable dt = TypeConveriontHelper.ConvretExcelToDataTable(SourceAppFilePath);
string targetPath = BatchFolderPath + @"\" + "TRANSACT.INX";
StreamWriter wrtr = null;
wrtr = new StreamWriter(targetPath);
for (int x = 0; x < dt.Rows.Count; x++)
{
string rowString = "";
for (int y = 0; y < dt.Columns.Count; y++)
{
if (y == dt.Columns.Count - 1)
{
rowString += "\"" + dt.Rows[x][y].ToString() + "\"";
}
else
{
rowString += "\"" + dt.Rows[x][y].ToString() + "\"~";
}
}
rowString = rowString.Replace("\"", String.Empty).Trim();
wrtr.WriteLine(rowString);
}
wrtr.Close();
wrtr.Dispose();
Datatable返回“Date”列,其中包括Time以及Date。但我只需要显示日期。给我一个解决方案。感谢。
答案 0 :(得分:1)
DateTime dateAndTime = DateTime.Parse(string);
DateTime dateOnly = dateAndTime.Date;
String dateString = dateAndTime.ToShortDateString();
dateAndTime.ToString("MMMM dd, yyyy");
代码:
StringBuilder rowString = new StringBuilder();
int dateTimeColumn = 3;
for (int y = 0; y < dt.Columns.Count; y++)
{
string cellValue = dt.Rows[x][y].ToString();
if(y == dateTimeColumn)
{
DateTime dateAndTime = DateTime.Parse(cellValue);
cellValue = dateAndTime.ToShortDateString();
}
rowString.Append(cellValue);
if (y != dt.Columns.Count - 1)
{
rowString.Append("~");
}
}
wrtr.WriteLine(rowString.ToString());
答案 1 :(得分:1)
rowString += "\"" + DateTime.Parse(dt.Rows[x][y]).ToString("dd/MM/yyyy") + "\"";
或完全实现如:
DataTable dt = TypeConveriontHelper.ConvretExcelToDataTable(SourceAppFilePath);
string targetPath = BatchFolderPath + @"\" + "TRANSACT.INX";
StreamWriter wrtr = null;
wrtr = new StreamWriter(targetPath);
for (int x = 0; x < dt.Rows.Count; x++)
{
string rowString = "";
for (int y = 0; y < dt.Columns.Count; y++)
{
string dateTimeString = dt.Rows[x][y].ToString();
DateTime dateTime;
if (DateTime.TryParse(dateTimeString, out dateTime))
{
string formattedDate = dateTime.ToString("dd/MM/yyyy");
if (y == dt.Columns.Count - 1)
{
rowString += "\"" + formattedDate + "\"";
}
else
{
rowString += "\"" + formattedDate + "\"~";
}
}
}
rowString = rowString.Replace("\"", String.Empty).Trim();
wrtr.WriteLine(rowString);
}
wrtr.Close();
wrtr.Dispose();
像michele所说,请参阅http://msdn.microsoft.com/en-us/library/az4se3k1.aspx以获取完整的参考资料
答案 2 :(得分:0)
无论DataTable
中的类型如何,我都已经完成了这项工作,并且我已经使用LINQ完成了这项工作,因为您使代码缩短了很多。无法确定你是否插入了一个分隔符,如果你不是只用string.empty或空格替换@"\"
- 它基本上只是将列值合并为一个字符串输出。
以下是我使用的内容:
var dt = new DataTable();
dt.Columns.Add("SomeDateField");
dt.Columns.Add("OtherField");
dt.Columns.Add("AnotherOtherField");
dt.Rows.Add(DateTime.Now, "Test", "Test");
var rowStrings = dt.Rows.Cast<DataRow>().Select(x => String.Join(@"\", dt.Columns.Cast<DataColumn>().Select(y =>
{
DateTime dateOut = new DateTime();
if (DateTime.TryParse(x[y.ColumnName].ToString(), out dateOut))
return dateOut.ToShortDateString();
else
return x[y.ColumnName];
}).ToArray())).ToList();
如果列值可以解析为字符串,则使用&#34; ToShortDate&#34;字符串。
我也倾向于使用&#34;使用&#34;而不是手动处理作者。即使有例外,它也会为你召唤。
using (StreamWriter wrtr = new StreamWriter(""))
{
foreach (string rowString in rowStrings)
{
wrtr.WriteLine(rowString);
}
}