我想为用户显示带有字母的月份和日期。我可以使用DateTime.ToString("MMMM d");
,但在某些国家/地区,正确的格式是d MMMMM
.
有没有办法确保订单始终正确?
不,没有办法。只需快速浏览
[Globalization.CultureInfo]::GetCultures([Globalization.CultureTypes]::AllCultures) |
select @{l='Culture';e={$_.Name}},@{l='Pattern';e={$_.DateTimeFormat.LongDatePattern}}
揭示了许多文化,其中围绕月份名称和日期的内容需要包含在某些内容中,而排除在其他内容中。
有没有办法确保订单始终正确?
好吧,我能想到的最接近的方法是获得正确的“长日期格式”(例如CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern
,然后删除您不想要的任何元素。
然而,这将是一个相当脆弱的方法,我建议你对你特别关心的所有文化进行彻底的测试。例如,您需要考虑长日期模式不包含“MMMM”的任何文化......或者en-US
例如,长日期模式使用dd
而不是d
. 在这些情况下你想做什么?
然后是整个属格与非属格形式 - 我怀疑对于任何重要的文化,长日期格式和您所追求的“月日”格式都会使用相同的形式......但这一切都变得很漂亮老实说,乱七八糟。
您可以使用ToString()
采用 a 的重载CultureInfo
并使用适当的文化。
例如:
var american = new CultureInfo("en-us");
var dateString = new DateTime(2000,1,1).ToString("MMMM d", american);
产生“1 月 1 日”。
这个问题的更多信息。