如何获取DateTime解析失败的原因?

时间:2018-10-16 14:58:35

标签: c# .net

当我使用标准库日期和时间解析方法(DateTime.ParseExactDateTime.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#标准库的一部分。

1 个答案:

答案 0 :(得分:3)

然后,您将必须编写自己的解析函数。 .NET框架库在此处的异常文本中未提供更高级别的详细信息。也没有“详细程度标志”之类的东西。 Internally框架跟踪四个不同的ParseFailureKind值:

  • ArgumentNull
  • 格式化
  • FormatWithParameter
  • FormatBadDatetimeCalendar

因此,您最多只能得到一个无效参数的指示(例如“ Format_BadDayOfWeek”),但是没有字符位置。

要解决第一个示例,您可以使用ParseExact启用空白容限,如下所示:

var date = DateTime.ParseExact(
    "12.04.2018  13:10", 
    "dd.MM.yyyy HH:mm", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.RoundtripKind | DateTimeStyles.AllowWhiteSpaces
);