CSVHelper更改日期和时间的输出方式

The*_*dge 6 .net c# csvhelper

我正在使用CsvHelper编写一些CSV文件,并想将日期和时间的格式更改为特定的格式。遵循/sf/answers/2227233501/的建议, 我可以为我的每个类成功创建映射。

但是,它有一个明显的缺点,即我现在需要为要导出的所有类创建自定义映射。因为我一直希望导出的所有字段都成为维护的噩梦,因为每次都必须修改地图。

那么,有什么简单的方法可以告诉CsvHelper 使用特定格式写入所有日期和时间

小智 38

对我来说,在类上使用 CsvHelper 属性更容易。

[Format("yyyy-MM-dd")]完成了日期时间格式化的工作。

namespace BarNamespace
{
    using System;
    using CsvHelper.Configuration.Attributes;

    public class Foo
    {
        [Name("ColumnName1")]
        [Format("yyyy-MM-dd")]
        public DateTime Date { get; set; }

        [Name("ColumnName2")]
        public string Col2{ get; set; }

        [Name("ColumnName3")]
        public long Col3{ get; set; }
    }
}

Run Code Online (Sandbox Code Playgroud)

  • 这是一种更具可读性的做事方式。 (5认同)

Jos*_*ose 8

您可以使用TypeConverterOptionsFactory.

void Main()
{
    using (var stream = new MemoryStream())
    using (var reader = new StreamReader(stream))
    using (var writer = new StreamWriter(stream))
    using (var csv = new CsvWriter(writer))
    {
        var options = new TypeConverterOptions
        {
            Format = "o"
        };
        TypeConverterOptionsFactory.AddOptions<DateTime>(options);

        csv.WriteField(DateTime.Now);
        csv.NextRecord();
        writer.Flush();
        stream.Position = 0;

        reader.ReadToEnd().Dump();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

2016-09-19T11:01:41.5507054-05:00
Run Code Online (Sandbox Code Playgroud)

  • TypeConverterOptionsFactory 在版本 26.0.1 中不再可见 (2认同)

Pyl*_*iev 6

使用CsvHelper的较新版本(12.1.2),可以使用以下命令对其进行存档 TypeConverterOptionsCache

var options = new TypeConverterOptions { Formats = new[] { "MM/dd/yyyy" } };
csvWriter.Configuration.TypeConverterOptionsCache.AddOptions<DateTime>(options);
Run Code Online (Sandbox Code Playgroud)

输出日期

08/24/1991
Run Code Online (Sandbox Code Playgroud)

  • 如果您混合使用了“ DateTime”和“ DateTime?”,请不要忘记注册这两种类型! (2认同)