c# - 如何获取 DateTime 解析失败的原因?
问题描述
当我使用标准库日期和时间解析方法(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# 标准库的一部分。
解决方案
然后,您将不得不编写自己的解析函数。.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
);
推荐阅读
- asp.net-mvc - Fancytree 在 MVC 4 中无法正确加载
- tensorflow2.0 - TensorFlow Lite 全整数量化在 TF 2 中失败
- laravel - 尝试引用关系表中的类型时找不到列
- postgresql - 带有子查询的 SQL 条件返回操作数错误
- swift - 在 SwiftUI 上的 Firebase 中使用 updateData 函数时出错
- git - 有没有办法让 git add --patch 跳过所有单行更改?
- android - Android 应用程序与 Play 商店中的新设备不兼容
- android - UI Automator - 获取 XY 坐标的背景颜色
- javascript - 检查输入值是否为回文的函数总是返回 true
- c# - 从 Git 存储库签出后编译测试套件时 MsBuild 失败