我在区分各种文化的日期时遇到问题。不久前,我在SO上对此发布了一个问题(C# DateTime ToString Standard culture format),并实施了此处发布的解决方案。但这不适用于葡萄牙语(例如),因为ShortDatePattern不等于“ d”预定义格式:
CultureInfo ci = CultureInfo.GetSpecificCulture("pt-PT");
DateTime date = new DateTime(2019, 7, 26);
date.ToString("d", ci); // --> 26-07-2019
date.ToString(ci.DateTimeFormat.ShortDatePattern, ci); // --> 26/07/2019
如何获取预定义样式的真实格式。我已经看过datetime.cs的.Net源代码,但我不明白它的工作原理,因为以下代码“ d”使用“ ShortDatePattern”(https://referencesource.microsoft.com/#mscorlib/system/globalization/datetimeformat.cs,f4cacf1a27a6de16)。
我认为这取决于运行代码的机器,因为在某些环境中,“ d”和ShortDatePattern是相同的...
答案 0 :(得分:0)
对不起,我在我的真实代码中发现了我的问题,当时我正在使用GetCultureInfo,但是当我对这个问题编写代码时,我已经使用了CreateSpecificCulture。因此,我已经修改了问题以使其与真实代码匹配,现在我写出答案,如果有人遇到类似问题,请离开这里。
要解决上述问题,我必须使用CreateSpecificCulture:
CultureInfo ci = CultureInfo.CreateSpecificCulture("pt-PT");
DateTime date = new DateTime(2019, 7, 26);
date.ToString("d", ci); // --> 26-07-2019
date.ToString(ci.DateTimeFormat.ShortDatePattern, ci); // --> 26-07-2019
有关CreateSpecificCulture和GetCultureInfo之间的区别的更多信息:When to use CultureInfo.GetCultureInfo(String) or CultureInfo.CreateSpecificCulture(String)