【发布时间】:2020-06-23 13:54:25
【问题描述】:
需要一种使用 CsvHelper nuget 包将 csv 文件中“yyyyMMDD”格式的字符串转换为 DateTime 格式“MM/DD/YYYY”的方法。
【问题讨论】:
标签: csvhelper
需要一种使用 CsvHelper nuget 包将 csv 文件中“yyyyMMDD”格式的字符串转换为 DateTime 格式“MM/DD/YYYY”的方法。
【问题讨论】:
标签: csvhelper
为各个 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();
}
}
【讨论】: