在读取文本文件时,日期格式在C#中更改

时间:2012-09-29 01:56:45

标签: c# wpf

我正在阅读具有以下数据格式的csv文件

14-Sep-12   ALUMINI 31-Dec-12   117.65  119.25  117.65  118.9   116.75  36
14-Sep-12   ALUMINI 30-Nov-12   116.95  118.65  116.8   118.4   116.5   252
14-Sep-12   ALUMINI 31-Oct-12   116.45  118.15  116.05  117.85  116.05  2802

我正在使用以下代码

阅读此数据
List<string> sc = new List<string>();
filepath = "abc.csv" ;

FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
StreamReader sr = new StreamReader(fs);

if (fs != null)
{
  while ((oneLine = sr.ReadLine()) != null)
  {
     sc.Add(oneLine);
  }

  sr.Close();

  // Now writing above data in  some file , fo and fout are already declared 
  fo = new FileStream("tempd.txt", FileMode.Append, FileAccess.Write);
  fout = new StreamWriter(fo);

  foreach (string str in sc)
  {
    // i am using ' ' as one of my splitter character
    char[] splitter = { ' ', ',', '\t' };
    string[] sa1 = str.Split(splitter);

    string wline = sa1[0] + "," + sa1[1] + "," + sa1[5] + "," + sa1[6] + "," + sa1[7] ;
    fout.WriteLine(wline);
  }
  fout.Close();
}

我最大的问题是第一列数据是2012年9月14日已更改为2012年9月14日( - 缺失)。这在我的其他应用程序中造成了问题。

在阅读和撰写文件时,我有什么方法可以转换日期格式,我希望将此日期存储为2012年9月14日的2012-9-14。

2 个答案:

答案 0 :(得分:2)

我认为这是您正在寻找的答案。

DateTime d = Convert.ToDateTime(sa1[0]);

string wline = d.ToString("yyyy-MM-dd") + "," + sa1[1] + "," + sa1[5] + "," + sa1[6] + "," + sa1[7];

答案 1 :(得分:1)

你的问题没有多大意义,所以我将在这里做一些假设。首先,你说它是一个CSV文件。 CSV代表逗号分隔值,但是当您显示示例时 - 我看不到任何逗号。我是否正确地认为您已在Microsoft Excel中打开CSV并从那里复制到您的帖子中?

如果是这样,那么我会要求您在记事本(或其他文本编辑器)中打开原始CSV文件。您可能会看到原始数据实际上没有破折号。

基本上,当您在CSV文件中提供9月14日的日期时 - Excel会识别出这是一个日期,但它会使用自己的默认日期格式对其进行格式化,这使其看起来像14-Sep-12在Excel中。

另一件事 - 您正在将整个文件读入字符串列表,然后将整个列表输出回重新格式化的新文件。而不是将所有这些加载到内存中,为什么不一次只操作一行?打开输入和输出文件,从输入读取一行,操作它,然后将其写入输出。然后循环到下一行并在完成后关闭这两个文件。你会发现它使用的内存要少得多,并且通常运行得更快。

如果您想重新格式化日期,那很容易。只需将字符串解析为日期即可。然后使用.ToString()中的字符串格式化程序控制日期的输出。我相信Geethanga的回答很好,但Date.Parse()通常比Convert.ToDateTime()更受欢迎。