C# 格式化 sql table 写入文本文件时的日期列输出
C# formatting sql table date column output when writing to text file
我的问题是我正在尝试通过我的程序生成文本文件以通过电子邮件发送。该程序在 sql table 中搜索日期名字姓氏和其他一些列,当然还会将日期和时间写入文件。我只想将日期而不是日期和时间写入文本文件。
正在使用的逻辑:
1.查询数据来自sql
2.插入数据到数据集中
3. 从数据集创建数据table
4. 将数据table写入txt文件
这是它被写入文本文件的方式
2014 年 1 月 20 日 12:00:00 上午 | 76770 | 1900 年 1 月 1 日 12:00:00 上午 | 0.0000 |
2014 年 1 月 28 日 12:00:00 上午 | 74000 | 1900 年 1 月 1 日 12:00:00 上午 | 0.0000 |
2014 年 1 月 20 日 12:00:00 上午 | 76770 | 2014 年 2 月 19 日 1:02:47 下午 | 28.5600 |
2014 年 1 月 28 日 12:00:00 上午 | 74000 | 2014 年 2 月 24 日 11:50:32 上午 | 7.0000 |
使用此代码:
public void writeData(StreamWriter sw, DataTable data)
{
int i;
sw.Write(Environment.NewLine);
foreach (DataRow row in data.Rows)
{
object[] array = row.ItemArray;
for (i = 0; i < array.Length - 1; i++)
{
sw.Write(array[i] + "\t | ");
}
sw.WriteLine(array[i]);
}
sw.Write(Environment.NewLine + "*****END OF DATA****" + Environment.NewLine + "Retrieved: " + DateTime.Now.ToString());
dataGridView1.DataSource = finalTable;
}
我希望它在 txt 文件中看起来像这样
2014 年 1 月 20 日 | 76770 | 1900 年 1 月 1 日 | 0.0000 |
2014 年 1 月 28 日 | 74000 | 1900 年 1 月 1 日 | 0.0000 |
2014 年 1 月 20 日 | 76770 | 2014 年 2 月 19 日 | 28.5600 |
2014 年 1 月 28 日 | 74000 | 2014 年 2 月 24 日 | 7.0000 |
有没有办法像那样缩短日期?
您可以试试这个 - 我还添加了一个额外的案例来将任何 decimal
值格式化为货币格式。
foreach (DataRow row in data.Rows)
{
for (i = 0; i < row.ItemArray.Length; i++)
{
if ( row.Table.Columns[i].DataType == typeof(System.DateTime))
sw.Write( ((DateTime)(row.ItemArray[i])).ToString("dd/MM/yyyy") + "\t | ");
else if ( row.Table.Columns[i].DataType == typeof(System.Decimal))
sw.Write( ((decimal)(row.ItemArray[i])).ToString("C") + "\t | ");
else
sw.Write(row.ItemArray[i] + "\t | ");
}
sw.WriteLine();
}
我的问题是我正在尝试通过我的程序生成文本文件以通过电子邮件发送。该程序在 sql table 中搜索日期名字姓氏和其他一些列,当然还会将日期和时间写入文件。我只想将日期而不是日期和时间写入文本文件。
正在使用的逻辑: 1.查询数据来自sql 2.插入数据到数据集中 3. 从数据集创建数据table 4. 将数据table写入txt文件
这是它被写入文本文件的方式
2014 年 1 月 20 日 12:00:00 上午 | 76770 | 1900 年 1 月 1 日 12:00:00 上午 | 0.0000 |
2014 年 1 月 28 日 12:00:00 上午 | 74000 | 1900 年 1 月 1 日 12:00:00 上午 | 0.0000 |
2014 年 1 月 20 日 12:00:00 上午 | 76770 | 2014 年 2 月 19 日 1:02:47 下午 | 28.5600 |
2014 年 1 月 28 日 12:00:00 上午 | 74000 | 2014 年 2 月 24 日 11:50:32 上午 | 7.0000 |
使用此代码:
public void writeData(StreamWriter sw, DataTable data)
{
int i;
sw.Write(Environment.NewLine);
foreach (DataRow row in data.Rows)
{
object[] array = row.ItemArray;
for (i = 0; i < array.Length - 1; i++)
{
sw.Write(array[i] + "\t | ");
}
sw.WriteLine(array[i]);
}
sw.Write(Environment.NewLine + "*****END OF DATA****" + Environment.NewLine + "Retrieved: " + DateTime.Now.ToString());
dataGridView1.DataSource = finalTable;
}
我希望它在 txt 文件中看起来像这样
2014 年 1 月 20 日 | 76770 | 1900 年 1 月 1 日 | 0.0000 |
2014 年 1 月 28 日 | 74000 | 1900 年 1 月 1 日 | 0.0000 |
2014 年 1 月 20 日 | 76770 | 2014 年 2 月 19 日 | 28.5600 |
2014 年 1 月 28 日 | 74000 | 2014 年 2 月 24 日 | 7.0000 |
有没有办法像那样缩短日期?
您可以试试这个 - 我还添加了一个额外的案例来将任何 decimal
值格式化为货币格式。
foreach (DataRow row in data.Rows)
{
for (i = 0; i < row.ItemArray.Length; i++)
{
if ( row.Table.Columns[i].DataType == typeof(System.DateTime))
sw.Write( ((DateTime)(row.ItemArray[i])).ToString("dd/MM/yyyy") + "\t | ");
else if ( row.Table.Columns[i].DataType == typeof(System.Decimal))
sw.Write( ((decimal)(row.ItemArray[i])).ToString("C") + "\t | ");
else
sw.Write(row.ItemArray[i] + "\t | ");
}
sw.WriteLine();
}