仅当日期字符串与通用时间格式匹配时,FileHelpers才会解析日期时间

时间:2019-10-17 22:46:26

标签: c# datetime filehelpers

仅当格式化程序设置为通用时间格式并且日期时间已经采用该格式时,我的datetime字段才会解析。这是预期的行为,还是应该能够采用任何正确的日期字符串并将其格式化为其他格式?如果是这样,如何解决?

如果日期输入已经是通用格式,这将起作用:

[FieldTrim(TrimMode.Both)]
[FieldConverter(ConverterKind.Date, "yyyy-MM-dd hh:mm")]
public DateTime Transaction_date; //where Transaction_date CSV value = "2019-01-02 6:00"

这些无效:

[FieldTrim(TrimMode.Both)]
[FieldConverter(ConverterKind.Date, "yyyy-MM-dd hh:mm")]
public DateTime Transaction_date; //where Transaction_date = "01-02-2019 6:00"

这是上面代码的例外:

  

“消息”:“发生错误。”,       “ ExceptionMessage”:“将'01 -02-2009 06:00'转换为类型:'DateTime'时出错。使用格式:'yyyy-MM-dd hh:mm'”,       “ ExceptionType”:“ FileHelpers.ConvertException”,       “ StackTrace”:“在FileHelpers.ConvertHelpers.DateTimeConverter.StringToField(String from)\ r \ n在FileHelpers.FieldBase.AssignFromString(ExtractedInfo fieldString,LineInfo line)\ r \ n在FileHelpers.FieldBase.ExtractFieldValue(LineInfo line)\ r \ n在FileHelpers.RecordOperations.StringToRecord(对象记录,LineInfo行,Object []值)\ r \ n在FileHelpers.FileHelperEngine 1.ReadStreamAsList(TextReader reader, Int32 maxRecords, DataTable dt)\r\n at FileHelpers.FileHelperEngine 1.ReadStream(TextReader阅读器,Int32 maxRecords)\ r \ n在FileHelpers。 FileHelperEngine`1.ReadString(String source,Int32 maxRecords)...

[FieldTrim(TrimMode.Both)]
[FieldConverter(ConverterKind.Date, "MM-dd-yyyy hh:mm")]
public DateTime Transaction_date; //where Transaction_date CSV value = "2019-01-02 6:00" Note that formatter is not universal date format

这是上述代码段的例外情况:

  

“消息”:“发生错误。”,       “ ExceptionMessage”:“将'2009-01-02 06:00'转换为类型:'DateTime'时出错。使用格式:'MM-dd-yyyy hh:mm'”,       “ ExceptionType”:“ FileHelpers.ConvertException”,       “ StackTrace”:“在FileHelpers.ConvertHelpers.DateTimeConverter.StringToField(String from)\ r \ n在FileHelpers.FieldBase.AssignFromString(ExtractedInfo fieldString,LineInfo line)\ r \ n在FileHelpers.FieldBase.ExtractFieldValue(LineInfo line)\ r \ n在FileHelpers.RecordOperations.StringToRecord(对象记录,LineInfo行,Object []值)\ r \ n在FileHelpers.FileHelperEngine 1.ReadStreamAsList(TextReader reader, Int32 maxRecords, DataTable dt)\r\n at FileHelpers.FileHelperEngine 1.ReadStream(TextReader阅读器,Int32 maxRecords)\ r \ n在FileHelpers。 FileHelperEngine`1.ReadString(String source,Int32 maxRecords)...

1 个答案:

答案 0 :(得分:2)

根据these docs,您可以使用ConverterKind.DateMultiFormat允许最多三种格式。

[FieldConverter(ConverterKind.DateMultiFormat, "yyyy-MM-dd HH:mm", "MM-dd-yyyy HH:mm")]

请注意,您的代码中包含hh。那是一个12小时制的小时,范围是01到12。如果没有为am / pm meridiem指示器指定tt,这不是很有用。您可能是指HH,它是24小时制的一个小时,范围从0023。格式化令牌区分大小写。

最终,您指定的格式将传递到the source code here中的DateTime.TryParseExact。因此,可以使用the .NET date and time format strings中的任何一个。

关于您的问题:

  

...应该能够采用任何正确的日期字符串...

不。它将仅接受您提供的格式。

请记住,当文化不清楚时,日期字符串可能会模棱两可。例如,01/02/2019在美国将是1月2日,但在世界上大部分其他地区将被解释为2月1日。