.NET Core中dd.MM.yyyy hh:mm:ss字符串转DateTime报FormatException
异常原因定位
核心问题来自格式字符串的小时占位符使用错误:
- 解析格式中使用的
hh占位符,对应的是12小时制的小时取值范围(01-12),必须搭配AM/PM时段标识才能完成全时段解析 - 待解析字符串中的小时值为
16,属于无AM/PM标识的24小时制时间表述,12小时制占位符既无法识别大于12的小时数值,也找不到匹配的时段标识,因此触发格式匹配失败抛出FormatException - 此处需要使用对应24小时制的小时占位符
HH(取值范围00-23),才能匹配这类24小时制时间字符串
修正后的实现代码
using System.Globalization; // 原始待解析字符串 string dateTime = "28.11.2020 16:08:43"; // 将错误的小时占位符替换为24小时制格式完成解析 var date = DateTime.ParseExact( dateTime, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture );
常见避坑提示
- DateTime格式占位符大小写严格敏感,混用
hh(12小时制)/HH(24小时制)是这类解析异常的最高发场景;无AM/PM标识的24小时制场景下,混用12小时制占位符会同时触发取值范围不匹配、缺失时段标识两类格式错误 - 格式字符串中的固定分隔符(点号、冒号等)必须和待解析字符串的实际分隔符完全一致,不能存在全角/半角差异
- 若待解析字符串存在多种可能的合法格式,可使用
ParseExact的重载版本传入格式数组,一次性适配多格式解析场景
内容的提问来源于stack exchange,提问作者lonelydev101
相关产品推荐
相关产品推荐

