使用DateTime.ParseExact时持续触发FormatException异常的问题求助
DateTime.ParseExact 触发 FormatException 的原因及解决方法
你的代码触发错误的核心原因是文化区域不匹配:
当你将第三个参数设为null时,ParseExact会使用当前线程的默认文化。如果当前系统的默认文化不使用AM/PM(比如部分欧洲地区采用24小时制),或者日期分隔符不是/,就会导致格式匹配失败。
解决方案
你需要明确指定与字符串格式匹配的文化,有两种常用方式:
- 使用美式英语文化(
en-US),该文化原生支持AM/PM标记和/日期分隔符:
var myDate = DateTime.ParseExact("3/14/2023 4:08:30 PM", "M/dd/yyyy h:mm:ss tt", CultureInfo.GetCultureInfo("en-US"));
- 使用
InvariantCulture(固定格式文化),它不受系统区域设置影响,同样支持目标格式:
var myDate = DateTime.ParseExact("3/14/2023 4:08:30 PM", "M/dd/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
补充说明
格式字符串中的/是自定义格式占位符,会被当前文化的日期分隔符替换。只有指定兼容的文化,才能保证/与原字符串中的分隔符匹配,同时让tt正确识别AM/PM标记。
内容的提问来源于stack exchange,提问作者Luis Eduardo
相关产品推荐
相关产品推荐

