Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FileHelpers库-是否可以更改字段';运行时的日期格式?_C#_Filehelpers - Fatal编程技术网

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

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字段应为日期格

使用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位数的年份。我会在程序启动时知道使用哪种格式

使用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创建了实例)。您可以将此解决方案作为最后手段。