[C#] すべての月の名前をリストする方法(例:コンボの場合)


Answers

次のようにして、月の名前を含む文字列の配列を返すことができます

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
Question

現時点では、毎月のDateTimeを作成し、その月のみを含むように書式設定しています。
これを行うには別の方法がありますか?




Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNamesからのローカライズされた月のリストと、 DateTimeFormatInfo.InvariantInfo.MonthNamesからの不変の月を得ることができます。

string[] localizedMonths = Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames;
string[] invariantMonths = DateTimeFormatInfo.InvariantInfo.MonthNames;

for( int month = 0; month < 12; month++ )
{
    ListItem monthListItem = new ListItem( localizedMonths[month], invariantMonths[month] );
    monthsDropDown.Items.Add( monthListItem );
}

カレンダーの種類によっては1年の月数に問題があるかもしれませんが、この例では12ヶ月と仮定しています。




List<string> mnt = new List<string>();    
int monthCount = Convert.ToInt32(cbYear.Text) == DateTime.Now.Year ? DateTime.Now.Month : 12;    
            for (int i = 0; i < monthCount; i++)    
            {    
                mnt.Add(CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);    
            }    
            cbMonth.DataSource = mnt;



LINQ使用してC#で月の名前の動的な文化固有のリストを取得する方法。

ComboBoxName.ItemsSource= 
System.Globalization.CultureInfo.
CurrentCulture.DateTimeFormat.MonthNames.
TakeWhile(m => m != String.Empty).ToList();

または

この例では、MonthおよびMonthNameプロパティを使用して匿名オブジェクトが作成されます

var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
 .TakeWhile(m => m != String.Empty)
 .Select((m,i) => new  
 {  
     Month = i+1,  
     MonthName = m
 }) 
 .ToList();

PS :MonthNames配列に空の13番目の月が含まれているため、TakeWhileメソッドを使用します。




ここでは、Months for Credit Cardフォームをドロップダウンリストに入力するための良い例を示します。

    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

現在の言語にローカライズされた以下の例を作成します。

01 - January
02 - February
etc.



これらは、グローバリゼーションの名前空間の配列として定義されています。

using System.Globalization;

for (int i = 0; i < 12; i++) {
   Console.WriteLine(CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);
}