0

编辑:这个问题是基于我对 Excel 行为的误解。我一直认为 M/DD/YYYY 格式在输入文件中,但这只是 Excel 对其重新格式化,TextFieldParser 确实保留了原始格式 YYYY-MM-DD。谢谢大家让我得出这个结论。

我正在使用 C# 中的 TextFieldParser 类从控制台应用程序的 .csv 文件中读取,如下所示:

using (TextFieldParser parser = new TextFieldParser(@"C:\myfilepath"))
{
    parser.TextFieldType = FieldType.Delimited; //set up parser
    parser.SetDelimiters(",", "|");

    string[] header = parser.ReadFields(); //process header
}

输入文件中日期的格式是M/DD/YYYY. 但是,我需要格式是别的东西,比如说MM/DD/YYYY.

当 TextFieldParser 读取日期字段时,它将它们更改为YYYY-MM-DD我在输出中看到的格式,因此我知道它以某种方式识别看起来像日期的字段并将它们转换为特定格式。我的问题归结为简单地改变这种格式。希望有一些方法可以做到这一点......

我知道我可以在解析器读取日期字符串后简单地编辑它们,但这对我来说似乎很草率。

谢谢。

4

1 回答 1

2

根据 MSDN TextFieldParser.ReadFields, TextFieldParser.ReadFields() - 读取当前行上的所有字段,将它们作为字符串数组返回

尝试在 csv 文件中使用以下行:

     1,2019-10-04,04/10/2019,test

这有效:

    using (TextFieldParser parser = new TextFieldParser(@"<path to testcsv.csv>"))
                {
                    parser.TextFieldType = FieldType.Delimited; 
                    parser.SetDelimiters(",", "|");

                    string[] current = parser.ReadFields();
                    string[] formats = new string[] { "yyyy-MM-dd", "dd/MM/yyyy", "MM/dd/yyyy" };
                    foreach (string f in current)
                    {
                        DateTime dv ;
                        if (DateTime.TryParseExact(f, formats, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out dv))
                        {
                            Console.WriteLine($"found date - { dv.ToLongDateString()}");
                        }
                        else 
                        {
                            Console.WriteLine($"found something  - {f}");
                        }
                    }
                }
于 2019-10-04T17:17:37.817 回答