FileHelpers库 - 是否可以在运行时更改字段的日期格式?

时间:2015-06-11 07:06:35

标签: 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字段应该采用日期格式“d-MMMM-yyyy”,并在编译时设置。我在运行时要求(有时)将此格式更改为“d-MMMM-yy”。

要使用的格式取决于源文件 - 有些文件有2位数年份,有些文件有4位数年份。我会在程序启动时知道要使用哪种格式。

FileHelpers可以实现吗?我想我可以添加一个字符串列,如:

[FieldTrim(TrimMode.Both)] 
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
public string DOBAsString; 

,并获取FileHelpers将数据读入此字段,并在循环中将其自身转换为DOB字段。有更干净的方式吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用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()); 
相关问题