当我使用标准库日期和时间解析方法(DateTime.ParseExact
,DateTime.TryParse
等)并且操作失败时,我得到的只是一般消息:
字符串未被识别为有效的DateTime
示例:
还有其他空格
DateTime.ParseExact("12.04.2018 13:10", "dd.MM.yyyy HH:mm", CultureInfo.InvariantCulture,DateTimeStyles.RoundtripKind);
将AB
放置在期望小时的位置
DateTime.ParseExact("12.04.2018 AB:10", "dd.MM.yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)
我想要的是错误的确切原因。类似于以下内容将是很好的:
解析格式为“ dd.MM.yyyy HH:mm”的字符串“ 12.04.2018 AB:10” 失败,因为预计在索引11(“ AB:10”)小时(HH)。
编辑:一些现有的库可以满足我的需要,它不需要成为c#标准库的一部分。
答案 0 :(得分:3)
然后,您将必须编写自己的解析函数。 .NET框架库在此处的异常文本中未提供更高级别的详细信息。也没有“详细程度标志”之类的东西。 Internally框架跟踪四个不同的ParseFailureKind
值:
因此,您最多只能得到一个无效参数的指示(例如“ Format_BadDayOfWeek”),但是没有字符位置。
要解决第一个示例,您可以使用ParseExact启用空白容限,如下所示:
var date = DateTime.ParseExact(
"12.04.2018 13:10",
"dd.MM.yyyy HH:mm",
CultureInfo.InvariantCulture,
DateTimeStyles.RoundtripKind | DateTimeStyles.AllowWhiteSpaces
);