首页 > 解决方案 > 如何获取 DateTime 解析失败的原因?

问题描述

当我使用标准库日期和时间解析方法(DateTime.ParseExactDateTime.TryParse)并且操作失败时,我得到的只是通用消息:

字符串未被识别为有效的 DateTime

例子:

我想要的是错误的确切原因。类似于以下内容会很棒:

解析格式为“dd.MM.yyyy HH:mm”的字符串“12.04.2018 AB:10”失败,因为在索引 11 (“AB:10”) 处预计会有小时 (HH)。

编辑:一些现有的库可以满足我的需求,它不需要是 c# 标准库的一部分。

标签: c#.net

解决方案


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

  • 参数空
  • 格式
  • 带参数的格式
  • 格式坏日期时间日历

所以最多你得到一个无效参数的指示(如“Format_BadDayOfWeek”),但没有字符位置。

为了解决您的第一个示例,您可以使用 ParseExact 启用空格容错,如下所示:

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

推荐阅读