c# - 文化 缩写的月份名称有时以句点结尾

标签 c# cultureinfo culture

对于 CultureInfo,调用 DateTimeFormat.AbbreviatedMonthNames 会返回一个数组,其中每个月都以 . 结束,例如 ['jan .',... 'dis.'].

这不会发生在构建服务器上,也不会发生在所有开发人员机器上,只是一些。 CurrentCulture 和机器位置/语言的设置似乎没有关联。

选择这个的测试是针对西类牙文化的,包括为西类牙语显式创建 CultureInfo。所以我会认为这些信息被硬编码在某个地方并且只是被读出,据我所知是这样。从 CultureData.AbbreviatedMonthNames(calendarId) 读取。

更新: 经过进一步调查,似乎如果启动时的当前文化是 en-GB 那么就没有句点。如果是 en-US 则有。显式设置 CurrentCulture 没有任何效果,只是在启动时有所不同。

最佳答案

您可以使用自己的 AbbreviatedMonthNames 集合,这样总会有相同的内容,如下所示:

CultureInfo ci = CultureInfo.CreateSpecificCulture("en-US");
DateTimeFormatInfo dtfi = ci.DateTimeFormat;
dtfi.AbbreviatedMonthNames = new string[] { "Jan.", "Feb.", "Mar.", 
                                              "Apr.", "May.", "Jun.", 
                                              "Jul.", "Aug.", "Sep.", 
                                              "Oct.", "Nov.", "Dec.", "" };  
dtfi.AbbreviatedMonthGenitiveNames = dtfi.AbbreviatedMonthNames;

然后你可以像这样使用它:

Console.WriteLine(DateTime.Now.ToString("dd MMM yyyy", dtfi));

或者在当前线程中更改:

System.Threading.Thread.CurrentThread.CurrentCulture = ci;
Console.WriteLine(DateTime.Now.ToString("dd MMM yyyy"));

关于c# - 文化 缩写的月份名称有时以句点结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43632983/

相关文章:

Android:如何为应用程序设置文化值

c# - 如何检测 KeyDown 事件中的 NumberDecimalSeparator (C#)

localization - 如果您有一个应用程序本地化为 pt-br 和 pt-pt,如果系统只报告 "pt"代码,您应该选择哪种语言?

c# - 树阵列到站点地图

c# - 存储 key 的最佳实践

c# - 每次更改 ComboBox(使用 SelectedIndexChanged)时,如果打开,则以其他形式显示具有新值的消息

c# - 为什么 1 000 000 不等于 1000000.toString ("N", new CultureInfo ("fr-FR"))

c# - WPF 依赖属性 : Why do I need to specify an Owner Type?

c# - 文化不敏感 VS 文化敏感

c# - 在 WPF 应用程序中单击按钮会重置文化