如何列出所有的月份名称,例如组合?

目前,我正在为每个月创buildDateTime并将其格式化为仅包含月份。
有没有其他的或更好的方法来做到这一点?

您可以使用DateTimeFormatInfo获取该信息:

 // Will return January string name = DateTimeFormatInfo.CurrentInfo.GetMonthName(1); 

或者得到所有的名字:

 string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames; 

您还可以基于具有DateTimeFormatInfo.GetInstanceCultureInfo实例化新的DateTimeFormatInfo ,或者可以使用当前区域性的CultureInfo.DateTimeFormat属性。

请记住,.Net中的日历支持长达13个月,因此在仅有12个月的日历(例如在en-US或fr中find的那些日历)中,最后会得到一个额外的空string。

您可以使用以下内容来返回包含月份名称的string数组

 System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames 

此方法将允许您将int个对应的月份键值对列表应用于它们。 我们使用Enumerable Ranges和LINQ单行生成它。 Hooray,LINQ代码打高尔夫!

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

将其应用到ASP下拉列表中:

 // <asp:DropDownList runat="server" ID="ddlMonths" /> ddlMonths.DataSource = months; ddlMonths.DataTextField = "M"; ddlMonths.DataValueField = "I"; ddlMonths.DataBind(); 

它们被定义为全局化名称空间中的一个数组。

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

尝试枚举月份名称:

 for( int i = 1; i <= 12; i++ ){ combo.Items.Add(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[i]); } 

它位于System.Globalization命名空间中。

希望有所帮助!

您可以从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 ); } 

根据日历types,一年中的月数可能会有一些问题,但在本例中我只假设了12个月。

 public IEnumerable<SelectListItem> Months { get { return Enumerable.Range(1, 12).Select(x => new SelectListItem { Value = x.ToString(), Text = DateTimeFormatInfo.CurrentInfo.GetMonthName(x) }); } } 

一种在C#中用LINQ检索dynamic文化特定的月份名称列表的方法。

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

要么

在这个例子中,使用Month和MonthName属性创build一个匿名对象

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

PS :我们使用TakeWhile方法,因为MonthNames数组包含一个空的第13个月。

一点LINQ只是因为它是精美的简洁:

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

您需要Where子句,因为日历会返回第13个月的名称(英文为空)。

该索引返回IEnumerable中的索引,因此您需要为实际的月份索引+1。

 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; 
 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 

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

仅适用于美国英语:

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

下面是一个很好的例子,用信用卡表格的月份填写下拉列表:

  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 

创build以下本地化到当前的语言,例如:

 01 - January 02 - February etc.