C# FileHelpers库-是否可以更改字段';运行时的日期格式?
使用FileHelpers库版本3.0.1 假设您定义了一个要从csv文件导入的字段,如下所示:C# FileHelpers库-是否可以更改字段';运行时的日期格式?,c#,filehelpers,C#,Filehelpers,使用FileHelpers库版本3.0.1 假设您定义了一个要从csv文件导入的字段,如下所示: [FieldTrim(TrimMode.Both)] [FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)] [FieldConverter(ConverterKind.Date, "d-MMMM-yyyy")] public DateTime DOB; 现在,csv字段应为日期格
[FieldTrim(TrimMode.Both)]
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
[FieldConverter(ConverterKind.Date, "d-MMMM-yyyy")]
public DateTime DOB;
现在,csv字段应为日期格式“d-MMMM-yyyy”,并在编译时设置。我需要在运行时(有时)将此格式更改为“d-MMMM-yy”
使用的格式取决于源文件-一些文件有2位数的年份,其他文件有4位数的年份。我会在程序启动时知道使用哪种格式
使用FileHelper可以这样做吗?我想我可以添加一个字符串列,如:
[FieldTrim(TrimMode.Both)]
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
public string DOBAsString;
,并让FileHelpers将数据读入该字段,并在循环中将其转换为DOB字段。有没有更干净的方法 最简单的方法是使用
ConverterKind.DateMultiFormat
而不是ConverterKind.Date
[FieldTrim(TrimMode.Both)]
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
[FieldConverter(ConverterKind.DateMultiFormat, "d-MMMM-yyyy", "d-MMMM-yy"]
public DateTime DOB;
通常,在运行时指定格式的另一种方法是与类生成器一起使用:
FixedClassBuilder cb = new FixedLengthClassBuilder("Customers");
cb.AddField("DOB", 8, typeof(DateTime));
cb.LastField.Converter.Kind = ConverterKind.Date;
cb.LastField.Converter.Arg1 = "d-MMMM-yyyy"; // or whatever
cb.LastField.TrimMode = TrimMode.Both;
cb.LastField.FieldNullValue = DateTime.Now;
engine = new FileHelperEngine(cb.CreateRecordClass());
您可以在运行时更改FieldConverter属性的值。您可以在这里看到一个示例,谢谢,但我不确定这是否适用于FileHelpers,因为FileHelpers负责创建字段所在对象的实例。所以似乎没有钩子可以得到对象的实例(?),我理解。如果无法找到使用FileHelpers解决此问题的方法,仍然可以在运行时更改该属性(即使FileHelpers创建了实例)。您可以将此解决方案作为最后手段。