【问题标题】:CSV Helper Convert String into DateTimeCSV Helper 将字符串转换为日期时间
【发布时间】:2020-06-23 13:54:25
【问题描述】:

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

【问题讨论】:

    标签: csvhelper


    【解决方案1】:

    为各个 DateTime 属性设置 TypeConverterOption

    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.Configuration.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");
        }
    }
    

    为所有DateTime 属性设置TypeConverterOptions

    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.Configuration.TypeConverterOptionsCache.AddOptions<DateTime>(options);
    
            var records = csv.GetRecords<Test>().ToList();
        }
    }
    

    【讨论】:

    • 第二个选项解决了这个问题,我在格式中使用了“yyyy/MM/dd”并且看到了这个问题。感谢大卫的帮助。
    猜你喜欢
    • 2023-04-08
    • 2015-09-17
    • 1970-01-01
    • 2022-08-18
    • 2017-08-31
    相关资源
    最近更新 更多