【问题标题】:How to get an array of months in c#如何在 C# 中获取月份的数组
【发布时间】:2010-12-13 07:42:20
【问题描述】:

我想在 c# 中获取月份数组。
像这样的东西:{ January , February , ... , December }
我怎样才能做到这一点?请给我发送 C# 代码。 谢谢

【问题讨论】:

    标签: c#


    【解决方案1】:

    您还需要注意本地化问题: 您可以使用:

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

    在一些屈折语言中,属格由属格名词屈折引入,在非屈折语言中,它与英语介词“of”的等价物的使用相匹配。例如,俄语(俄罗斯)“ru-RU”文化中的日期由日期编号和属格月份名称组成。

    More info…

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

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

    【讨论】:

    • 我怎样才能得到英语月份?
    • 您需要将当前文化设置为 en-US Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");然后使用tring[] monthNames = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthGenitiveNames;这将确保代码已准备好本地化
    • 更改当前区域性将影响该线程上的所有进一步执行。读取原始值并在您的代码之后将其更改回可能是一个好主意。或者你可以调用类似 new CultureInfo("...").DateTimeFormat.MonthGenitiveNames.
    • 请注意,这将返回第 13 个空白月份名称。
    【解决方案2】:
    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,请看下面我的帖子
    • Ngm 的 MonthGenitiveNames 方法可能更合适,具体取决于上下文。
    • 好的,我已经添加了“en-UScultureinfo”月份名称
    • 这给出了一个长度为 13,而不是 12 的数组,其中最后一个元素是空白的。我的直觉反应是,这是不可取的。
    【解决方案3】:
    string[] months = new string[] {"January", "February", "March", "April", "May",
      "June", "July", "August", "September", "October", "November", "December"};
    

    【讨论】:

    • 是的,写你的意思有什么问题?感谢您记住如何接吻。
    • 你甚至不需要new string[] {new [] { 就可以了。
    【解决方案4】:

    希望能教您如何应用范围函数来创建连续事物的替代方法。

    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 函数,该函数生成从 1 月到 12 月的日期列表。

    3. Select(m => m.ToString("yyyy MMMM") 获取从一月到十二月的每个日期,并将它们转换为格式化字符串(在本例中为“2014 年一月”)

    4. ToList() 计算所有函数并将其作为字符串列表返回。

    【讨论】:

    • 不是获取月份名称的最佳方式,但绝对可以作为替代解决方案。 +1 表示努力和解释。
    猜你喜欢
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多