我正在找人来帮助我理解为什么这个单元测试通过了。
本质上,我们希望支持各种日期格式,但en-CA
应被视为DD/MM/YYYY
,如果客户端使用en-us
文化,则我们希望将日期视为MM/DD/YYYY
。我不明白为什么这不是DateTime.Parse
和DateTime.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
)并且日期时间格式提供程序的标准模式都不匹配时,很难知道发生了什么(?)。