如何列出所有的月份名称,例如组合?
目前,我正在为每个月创buildDateTime
并将其格式化为仅包含月份。
有没有其他的或更好的方法来做到这一点?
您可以使用DateTimeFormatInfo
获取该信息:
// Will return January string name = DateTimeFormatInfo.CurrentInfo.GetMonthName(1);
或者得到所有的名字:
string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames;
您还可以基于具有DateTimeFormatInfo.GetInstance
的CultureInfo
实例化新的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.