FileHelpers 库 - 是否可以在运行时更改字段的日期格式?
FileHelpers library - Is it possible to change field's date format at runtime?
使用 FileHelpers 库版本 3.0.1。
假设您定义了一个要从 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 位数年份。我会在程序启动时知道要使用哪种格式。
这可以用 FileHelpers 实现吗?我想我可以添加一个字符串列,例如:
[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;
通常,另一种在运行时指定格式的方法是将 runtime classes 与 ClassBuilder 一起使用:
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());
使用 FileHelpers 库版本 3.0.1。
假设您定义了一个要从 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 位数年份。我会在程序启动时知道要使用哪种格式。
这可以用 FileHelpers 实现吗?我想我可以添加一个字符串列,例如:
[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;
通常,另一种在运行时指定格式的方法是将 runtime classes 与 ClassBuilder 一起使用:
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());