如何在C#中获取月份数组

14

我想在C#中获取月份数组,类似这样:{一月,二月,...,十二月}
我该怎么做? 请用C#向我发送代码。 谢谢

```c# string[] months = DateTimeFormatInfo.CurrentInfo.MonthNames; ```
4个回答

37

你需要注意本地化问题:

你可以使用:

string[] monthNames = 
    System.Globalization.CultureInfo.CurrentCulture
        .DateTimeFormat.MonthGenitiveNames;

在一些有屈折变化的语言中,通过所谓的属格名词来引入属格格,而在非屈折变化的语言中,则使用类似于英语介词“of”的等效物。例如,在俄语(俄罗斯)文化中,“ru-RU”,日期由日期编号和属格月份名称组成。

更多信息...

编辑: 如果需要英文月份名称,可以将当前文化设置为en-US

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 

我怎样才能只获取英文月份? - LIX
你需要将当前文化设置为 en-US。 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 然后使用 tring[] monthNames = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthGenitiveNames;这将确保代码具备本地化能力。 - coder_bro
3
改变当前的文化会影响到该线程上的所有后续执行。最好在您的代码之后读取原始值并将其更改回来。或者你可以调用类似new CultureInfo(“...”)。DateTimeFormat.MonthGenitiveNames的内容。 - sisve
3
请注意,这将返回第13个空白月份的名称。 - stannius
"InvariantCulture" 返回英文月份名称,因此对于这些内容无需设置线程文化。 - stuartd

17
string[] monthNames = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;

foreach (string m in monthNames) // writing out
{
    Console.WriteLine(m);
}

输出:

January
February
March
April
May
June
July
August
September
October
November
December

更新:
请注意,对于不同的地区/文化,输出可能不是英语。尽管以前没有测试过。

仅适用于美式英语:

string[] monthNames = (new System.Globalization.CultureInfo("en-US")).DateTimeFormat.MonthNames;

你需要小心使用像俄语这样的一些语言中的MonthNames,可以看看我下面的帖子。 - coder_bro
Ngmзҡ„MonthGenitiveNamesж–№жі•ж №жҚ®дёҠдёӢж–ҮеҸҜиғҪжӣҙеҠ еҗҲйҖӮгҖӮ - o.k.w
好的,我已经添加了“en-US CultureInfo”月份名称。 - o.k.w
这将给出一个长度为13的数组,而不是12,其中最后一个元素为空白。我的直觉是这并不理想。 - Chad

12
string[] months = new string[] {"January", "February", "March", "April", "May",
  "June", "July", "August", "September", "October", "November", "December"};

1
是啊,写下你想表达的有什么不对吗?记得保持简单直接,赞一个。 - Jeff Meatball Yang
你甚至不需要使用 new string[] {new [] { 就可以。 - Yogesh

7
希望这篇文章能够教你如何使用range函数来创建连续的序列。
var startDate = new DateTime(2014,1,1);
var months = Enumerable.Range(0,11)
                       .Select(startDate.AddMonths);
                       .Select(m => m.ToString("yyyy MMMM"))
                       .ToList();

它所做的是创建一个DateTime对象(startDate),并使用该对象生成相对于自身的所有其他日期。
1. Enumerable.Range(0,11) 创建一个整数列表{0,1,2,3,4,5,6,7,8,9,10,11}。 2. Select(startDate.AddMonths) 将这些整数中的每一个提供给startDate的AddMonths函数,从而产生了一组从一月到十二月的日期。 3. Select(m => m.ToString("yyyy MMMM") 将每个从一月到十二月的日期转换为格式化后的字符串(在本例中为“2014 January”)。 4. ToList() 评估所有函数并将其作为字符串列表返回。

不是获取月份名称的最佳方式,但绝对是一个很好的替代方案。加一分给出色的努力和解释。 - Kagawa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接