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

为什么C#中DateTime.Parse在不同文化下解析“01/05/2020”结果一致?

单元测试通过原因说明

核心原因

你对en-CA文化的默认日期解析规则的预设认知存在偏差,这是测试通过的根本原因。

具体解释

  • 首先可以打印对应文化的默认短日期格式验证:
    Console.WriteLine(cultureUs.DateTimeFormat.ShortDatePattern); // 输出 MM/dd/yyyy
    Console.WriteLine(cultureCa.DateTimeFormat.ShortDatePattern); // 输出 MM/dd/yyyy
    
    .NET 中的en-CA(英语加拿大)文化默认配置对齐Windows官方区域设置,英语区加拿大日常使用中确实存在大量MM/DD/YYYY的日期书写习惯,和en-US的默认短日期格式一致;只有fr-CA(法语加拿大)文化的默认短日期格式才是你预期的dd/MM/yyyy。
  • 你的测试代码中,01/05/2020在en-US下会解析为2020年1月5日(月份为1),在默认配置的en-CA下同样解析为2020年1月5日(月份为1),自然满足Assert.Equal(d.Month,c.Month)的断言条件。

业务需求实现方案

如果你的业务要求en-CA必须按DD/MM/YYYY解析日期,不要依赖DateTime.TryParse的默认行为,因为不同操作系统版本、.NET版本的文化默认配置可能存在差异,推荐显式使用DateTime.TryParseExact指定匹配格式:

// en-CA 强制按 DD/MM/YYYY 解析
var caFormat = "dd/MM/yyyy";
DateTime.TryParseExact("01/05/2020", caFormat, cultureCa, DateTimeStyles.None, out var c);
// 此时解析结果为2020年5月1日,月份为5,和en-US解析的1月结果不同

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:45:05