How to list all month names, e.g. for a combo?

后端 未结 16 932
栀梦
栀梦 2020-12-23 14:38

At the moment I\'m creating a DateTime for each month and formatting it to only include the month.
Is there another or any better way to do this?

相关标签:
16条回答
  • 2020-12-23 15:05

    They're defined as an array in the Globalization namespaces.

    using System.Globalization;
    
    for (int i = 0; i < 12; i++) {
       Console.WriteLine(CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);
    }
    
    0 讨论(0)
  • 2020-12-23 15:06

    A little LINQ just because it is beautifully concise:

    var monthOptions = DateTimeFormatInfo.CurrentInfo.MonthNames
        .Where(p=>!string.IsNullOrEmpty(p))
        .Select((item, index) => new { Id = index + 1, Name = item });
    

    You need the Where clause because the calendar returns a 13th month name (empty in English).

    The index returns index within the IEnumerable, so you need a +1 for the actual month index.

    0 讨论(0)
  • 2020-12-23 15:07

    Sure, I'll give my input to a 10+ year old question.

    In my case, I create a property that returns a dictionary (or similar), generated with the following code:

    Dictionary<int, string> Months = Enumerable.Range(1, 12).Select(i => new KeyValuePair<int, string>(i, System.Globalization.DateTimeFormatInfo.CurrentInfo.GetMonthName(i))).ToDictionary(x => x.Key, x => x.Value);
    

    Output (from Linqpad):

    Key Value
    1   January
    2   February
    3   March
    4   April
    5   May
    6   June
    7   July
    8   August
    9   September
    10  October
    11  November
    12  December
    

    Hope somebody finds this useful!

    0 讨论(0)
  • 2020-12-23 15:09

    This method will allow you to apply a list of key value pairs of months to their int counterparts. We generate it with a single line using Enumerable Ranges and LINQ. Hooray, LINQ code-golfing!

    var months = Enumerable.Range(1, 12).Select(i => new { I = i, M = DateTimeFormatInfo.CurrentInfo.GetMonthName(i) });
    

    To apply it to an ASP dropdown list:

    // <asp:DropDownList runat="server" ID="ddlMonths" />
    ddlMonths.DataSource = months;
    ddlMonths.DataTextField = "M";
    ddlMonths.DataValueField = "I";
    ddlMonths.DataBind();
    
    0 讨论(0)
  • 2020-12-23 15:09

    Here is a good example for filling a drop down list with Months for Credit Card form:

        Dim currentCulture As CultureInfo = CultureInfo.CurrentUICulture
        Dim monthName, monthNumber As String
    
        For x As Integer = 0 To 11
            monthNumber = (x + 1).ToString("D2")
            monthName = currentCulture.DateTimeFormat.MonthNames(x)
            Dim month As New ListItem(String.Format("{0} - {1}", monthNumber, monthName),
                                      x.ToString("D2"))
            ddl_expirymonth.Items.Add(month)
        Next
    

    Creates the following localized to current language, example:

    01 - January
    02 - February
    etc.
    
    0 讨论(0)
  • 2020-12-23 15:11

    How to create a custom list of month names in any order

    Yes, I'm answering a question from over 10 years ago! :D

    Yet, I wanted to add this code snippet on the chance it might help others. It shows how to output a list of month names in any custom order. In my case I needed it to start in October, but you could put the months in any sequence (even have repeating months) by setting the list of integers.

    model.Controls = new
    {
        FiscalMonths = new
        {
            Value = DateTime.Now.Month,
            Options = (new List<int> { 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9 }).Select(p => new
            {
                Value = p,
                Text = DateTimeFormatInfo.CurrentInfo.GetMonthName(p)
            })
        }
    };
    

    And the json output for use in a dropdown:

      "FiscalMonths": {
       "Value": 10,
       "Options": [
        {
         "Value": 10,
         "Text": "October"
        },
        {
         "Value": 11,
         "Text": "November"
        },
        {
         "Value": 12,
         "Text": "December"
        },
        {
         "Value": 1,
         "Text": "January"
        },
        {
         "Value": 2,
         "Text": "February"
        },
        etc ....
    
    0 讨论(0)
提交回复
热议问题