((DateTime)somedate).ToString("ddd MMM dd yyyy")正在返回Tue June 21 2022
为什么不是俊!
发布于 2022-06-26 13:33:54
TL;DR;
如果您总是希望获得Jun,请使用不变区域性
((DateTime)somedate).ToString("ddd MMM dd yyyy", CultureInfo.InvariantCulture)较长解释
这是非常有趣的为什么这种情况(有时)会发生。
AbbreviatedMonthGenitiveNames 您应该检查您正在使用的文化的、、的值。
复制它
当您使用与默认情况不同的缩写月份属格名称的区域性时,您可以再现这种行为:
var culture = new CultureInfo("en-US");
culture.DateTimeFormat.AbbreviatedMonthNames = new string[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" };
culture.DateTimeFormat.AbbreviatedMonthGenitiveNames = new string[] { "Jan", "Feb", "Mar", "Apr", "May", "June", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" };
Console.WriteLine(new DateTime(2022, 6, 21).ToString("ddd MMM dd yyyy", culture)); // Tue June 21 2022解释
有一个解释,AbbreviatedMonthGenitiveNames
在某些语言中,作为日期一部分的月份名称出现在属格大小写中。例如,RU或俄罗斯(俄罗斯)文化中的日期由日数和属位月份名称组成,如1Января(1月1日)。对于这些区域性,如果自定义格式字符串包括"MMM“格式说明符,则
DateTime.ToString或ToString方法将包含AbbreviatedMonthGenitiveNames数组的适当成员,而不是结果字符串中的"MMM”。
有个问题中也提到了这一点:
这意味着,当将包含日的日期格式化为数字时(即在日期模式中使用
d或dd),则将使用属格名称。当您使用日期模式d.MMM.yyyy时,这意味着日期将使用属格月份名称进行格式化。您将得到一个格式化日期,类似于1.Jan..2020。注意,这里的属格月份名称是Jan.,而不是Jan。如果您解析回格式化的字符串1.Jan..2020,这将被很好地解析。您不是解析格式化的字符串,而是解析构造的字符串1.Jan.2020,这不是一个正确的形式。如果您希望使用DE获得所需的结果,您可以使用类似于d.MMMyyyy之类的内容,或者使用日期名称而不是日号(如ddd.MMM.yyyy)进行格式化。
可能解决办法
您可以使用不变区域性来获得您想要的结果:
new DateTime(2022, 6, 21).ToString("ddd MMM dd yyyy", CultureInfo.InvariantCulture)这导致:Tue Jun 21 2022
https://stackoverflow.com/questions/72760574
复制相似问题