【问题标题】:convert dd.mm.yyyy to yyyy-mm-dd in .csv file in c#在 c# 中将 .csv 文件中的 dd.mm.yyyy 转换为 yyyy-mm-dd
【发布时间】:2019-12-12 13:26:53
【问题描述】:

我有一个这样的 CSV 文件:

abc;30.11.2021;xyz

我需要将日期值转换成这种格式:

abc;2021-11-30;xyz

对此有什么想法吗?

目前我这样做:

//config Ini auslesen für Quell- und Zieldatei
        var dic = File.ReadAllLines("config.ini")
          .Select(l => l.Split(new[] { '=' }))
          .ToDictionary(s => s[0].Trim(), s => s[1].Trim());
        //Wert für Quelle
        string source = dic["source"];
        //Wert für das Ziel
        string target = dic["target"];

        string filePath = source ;

        var csv = File
        .ReadLines(source)
        .Select((line, index) => index == 0
           ? line + ";ExtID"                                     // Neue Kopfzeile
           : line + ";" + string.Concat(line.Split(';').Take(2)) // Spalte 1 + 2 in neue Spalte einfügen
         )
        .ToList();

        File.WriteAllLines(target, csv);

所以我读取了一个 csv 文件,添加一列并填充此列,但老实说我不知道​​如何转换日期值。

【问题讨论】:

  • 到目前为止,您尝试过什么,您到底卡在哪里?请展示您当前解决此问题的尝试,并指出您遇到问题的确切位置。
  • Stackoverflow 不能这样工作。没有人会用勺子喂你答案。为它工作并尝试自己找到解决方案。当你这样做时,你会有具体的疑问,你可以把这些带到这里。这个平台不是免费的编码服务。
  • 将字符串解析为日期(给出当前格式)并使用ToString 将其转换为字符串(给出新格式)。剩下的就是 CSV 操作。
  • 基本上有 2 个选项:1)创建将接收字符串并生成新字符串的转换函数(.split('.') 等)2)通过 DateTime 解析然后进行文本转换。
  • 第三种方式。使用 CSV 定义表示数据的类。 Read 值并使用新格式将它们写回。 github.com/JoshClose/CsvHelper/issues/697。这是对象 2 的 1 个类定义,用于写入器和读取器映射器,以及使用一个流读取器和写入器的 3 行代码。

标签: c# csv date datetime


【解决方案1】:

使用ParseExact 将字符串转换为DateTime 并使用ToString 转换回所需的格式

var s = DateTime.ParseExact("30.11.2021", "dd.MM.yyyy", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");
Console.WriteLine(s);

【讨论】:

    【解决方案2】:

    类似这样的:

    using (System.IO.StreamWriter writer = new System.IO.StreamWriter("newfile.csv"))
     {
         foreach (string line in System.IO.File.ReadAllLines("oldfile.csv"))
         {
             string[] items = line.Split(new[] { ';' });
    
             string newDateFormat = DateTime.ParseExact(items[1], "dd.MM.yy", System.Globalization.CultureInfo.CurrentCulture).ToString("yyyy-MM-dd");
    
             writer.Write(items[0]);
             writer.Write(';');
             writer.Write(newDateFormat);
             writer.Write(';');
             writer.Write(items[2]);
             writer.Write(';');
             writer.WriteLine();
         }
     }
    

    用输入文件替换“oldfile.csv”,输出将保存到“newfile.csv”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多