首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DateTime到string格式返回不正确的结果

DateTime到string格式返回不正确的结果
EN

Stack Overflow用户
提问于 2022-06-26 10:02:12
回答 1查看 78关注 0票数 -2

((DateTime)somedate).ToString("ddd MMM dd yyyy")正在返回Tue June 21 2022

为什么不是俊!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-26 13:33:54

TL;DR;

如果您总是希望获得Jun,请使用不变区域性

代码语言:javascript
运行
复制
((DateTime)somedate).ToString("ddd MMM dd yyyy", CultureInfo.InvariantCulture)

较长解释

这是非常有趣的为什么这种情况(有时)会发生

AbbreviatedMonthGenitiveNames 您应该检查您正在使用的文化的、的值。

复制它

当您使用与默认情况不同的缩写月份属格名称的区域性时,您可以再现这种行为:

代码语言:javascript
运行
复制
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”。

有个问题中也提到了这一点:

这意味着,当将包含日的日期格式化为数字时(即在日期模式中使用ddd ),则将使用属格名称。当您使用日期模式d.MMM.yyyy时,这意味着日期将使用属格月份名称进行格式化。您将得到一个格式化日期,类似于1.Jan..2020。注意,这里的属格月份名称是Jan.,而不是Jan。如果您解析回格式化的字符串1.Jan..2020,这将被很好地解析。您不是解析格式化的字符串,而是解析构造的字符串1.Jan.2020,这不是一个正确的形式。如果您希望使用DE获得所需的结果,您可以使用类似于d.MMMyyyy之类的内容,或者使用日期名称而不是日号(如ddd.MMM.yyyy )进行格式化。

可能解决办法

您可以使用不变区域性来获得您想要的结果:

代码语言:javascript
运行
复制
new DateTime(2022, 6, 21).ToString("ddd MMM dd yyyy", CultureInfo.InvariantCulture)

这导致:Tue Jun 21 2022

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72760574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档