[FileHelpers仅在日期字符串与通用时间格式匹配时解析日期时间

问题描述 投票:0回答:1

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

如果日期输入已经是通用格式,则可以使用:

[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.FileHelperEngine1.ReadStreamAsList(TextReader reader, Int32 maxRecords, DataTable dt)\r\n at FileHelpers.FileHelperEngine1.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.FileHelperEngine1.ReadStreamAsList(TextReader reader, Int32 maxRecords, DataTable dt)\r\n at FileHelpers.FileHelperEngine1.ReadStream(TextReader阅读器,Int32 maxRecords)\ r \ n在FileHelpers.FileHelperEngine` 1.ReadString(String source,Int32 maxRecords)...

c# datetime filehelpers
1个回答
0
投票

根据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。格式化令牌区分大小写。

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

关于您的问题:

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

没有它仅接受您提供的格式。

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

© www.soinside.com 2019 - 2024. All rights reserved.