CSV Helper 将字符串转换为日期时间

问题描述 投票:0回答:1

需要一种方法使用 CsvHelper nuget 包将 csv 文件中格式为“yyyyMMDD”的字符串转换为日期时间格式“MM/DD/YYYY”。

csvhelper
1个回答
4
投票

已更新版本20.0+

为各个

TypeConverterOption
属性设置
DateTime

public class Program
{
    static void Main(string[] args)
    {
        using (var stream = new MemoryStream())
        using (var writer = new StreamWriter(stream))
        using (var reader = new StreamReader(stream))
        using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
        {
            writer.WriteLine("Id,Name,Date");
            writer.WriteLine("1,one,20200623");
            writer.WriteLine("2,two,20190622");
            writer.Flush();
            stream.Position = 0;

            csv.Context.RegisterClassMap<TestMap>();
            var records = csv.GetRecords<Test>().ToList();
        }
    }
}

public class Test
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime Date { get; set; }
}

public sealed class TestMap : ClassMap<Test>
{
    public TestMap()
    {
        Map(m => m.Id);
        Map(m => m.Name);
        Map(m => m.Date).TypeConverterOption.Format("yyyyMMdd");
    }
}

为所有

TypeConverterOptions
属性设置
DateTime

static void Main(string[] args)
{
    using (var stream = new MemoryStream())
    using (var writer = new StreamWriter(stream))
    using (var reader = new StreamReader(stream))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        writer.WriteLine("Id,Name,Date");
        writer.WriteLine("1,one,20200623");
        writer.WriteLine("2,two,20190622");
        writer.Flush();
        stream.Position = 0;

        var options = new TypeConverterOptions { Formats = new[] { "yyyyMMdd" } };
        csv.Context.TypeConverterOptionsCache.AddOptions<DateTime>(options);

        var records = csv.GetRecords<Test>().ToList();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.