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

Posted

技术标签:

【中文标题】文化 缩写的月份名称有时以句点结尾【英文标题】:Culture Abbreviated month names end with period sometimes 【发布时间】:2017-04-26 11:31:45 【问题描述】:

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

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

选择这个的测试是针对西班牙文化的,包括为西班牙语明确创建一个CultureInfo。所以我会认为这些信息是硬编码的,只是被读出,据我所知。正在阅读来自CultureData.AbbreviatedMonthNames(calendarId)

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

【问题讨论】:

有一个类似的问题here。我要做的是使用我自己的 abbreviatedmonthnames 集合... 【参考方案1】:

您可以使用自己的 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"));

【讨论】:

以上是关于文化 缩写的月份名称有时以句点结尾的主要内容,如果未能解决你的问题,请参考以下文章

如何编码以句点结尾的blob名称?

月份名称到月份编号,反之亦然在python中

format 格式

月份的英文缩写以及月份的起源和历史故事

英语月份星期和简写

C# 日期时间格式化