为什么无论区域性如何,C# 日期时间都"01/05/2020"相同的分析?



我正在找人来帮助我理解为什么这个单元测试通过了。

本质上,我们希望支持各种日期格式,但en-CA应被视为DD/MM/YYYY,如果客户端使用en-us文化,则我们希望将日期视为MM/DD/YYYY。我不明白为什么这不是DateTime.ParseDateTime.TryParse的默认行为

[Fact]
public void DateTimeParse()
{
var cultureUs = CultureInfo.GetCultureInfoByIetfLanguageTag("en-us");
DateTime.TryParse("01/05/2020", cultureUs.DateTimeFormat, DateTimeStyles.None, out var d);

var cultureCa = CultureInfo.GetCultureInfoByIetfLanguageTag("en-ca");
DateTime.TryParse("01/05/2020", cultureCa.DateTimeFormat, DateTimeStyles.None, out var c);

Assert.Equal(d.Month,c.Month);
}

英文(Canada)的格式可能与您所想的不同。例如,代码:

foreach (var code in new[] { "en-US", "en-CA", "en-GB", })
{
Console.WriteLine($"Code {code}");
var dtf = CultureInfo.GetCultureInfo(code).DateTimeFormat;
Console.WriteLine(dtf.ShortDatePattern);
Console.WriteLine(dtf.DateSeparator);
Console.WriteLine();
}

写道:<>以前代码en - usM/d/yyyy/代码en-CAyyyy-MM-dd-代码en -dd/MM/yyyy/

当您使用TryParse(而不是TryParseExact)并且日期时间格式提供程序的标准模式都不匹配时,很难知道发生了什么(?)。

相关内容