You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#日期格式化异常:使用en-GB文化时日月颠倒问题

解决DateTime解析时日月颠倒的问题

我太懂你这个困扰了——明明指定了en-GB文化来解析"08-04-2019"(你期望是dd-MM-yyyy格式),结果却被解析成了4日8月,完全搞反了。这其实是因为你误解了Convert.ToDateTime结合CultureInfo的工作逻辑。

问题根源

en-GB文化的默认短日期格式是dd/MM/yyyy(用斜杠做分隔符),但你传入的日期用的是连字符-。当Convert.ToDateTime遇到和当前文化默认格式分隔符不匹配的字符串时,它会自动尝试匹配其他常见日期格式,这时候美式的MM-dd-yyyy(正好用连字符做分隔)就被优先匹配了,于是日月直接颠倒。

正确解决方案

要彻底避免这种歧义,别依赖文化的默认格式,改用DateTime.ParseExact或DateTime.TryParseExact明确指定你要解析的格式字符串,强制按照你期望的规则解析日期。

示例代码1:使用ParseExact

string inputDate = "08-04-2019";
// 明确指定格式为dd-MM-yyyy,确保解析逻辑完全符合预期
DateTime dob = DateTime.ParseExact(inputDate, "dd-MM-yyyy", new System.Globalization.CultureInfo("en-GB", true));

示例代码2:使用TryParseExact(更安全,避免解析失败抛出异常)

string inputDate = "08-04-2019";
if (DateTime.TryParseExact(inputDate, "dd-MM-yyyy", new System.Globalization.CultureInfo("en-GB", true), 
    System.Globalization.DateTimeStyles.None, out DateTime dob))
{
    // 解析成功,这里可以直接使用dob变量赋值给user.DOB
    user.DOB = dob;
}
else
{
    // 处理日期格式不正确的情况,比如返回错误提示给前端
}

额外提示

如果你的API接收的日期格式是固定的dd-MM-yyyy,那么始终用ParseExact/TryParseExact是最可靠的做法,完全规避了文化默认格式带来的不确定性。

内容的提问来源于stack exchange,提问作者Shreyas Pednekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:01:38