2008-11-24 35 views

回答

134

可以使用DateTimeFormatInfo来获取信息:

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

或获得所有名称:

string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames; 

您也可以实例化一个新DateTimeFormatInfo BA请致电CultureInfoDateTimeFormatInfo.GetInstance,或者您可以使用当前区域的CultureInfo.DateTimeFormat属性。

请记住,.Net中的日历支持长达13个月,因此您将在仅有12个月的日历(例如在en-US或fr中找到的日历)的末尾获得额外的空字符串。

+7

你的第二个例子不会编译。您需要创建一个新的DateTimeFormatInfo实例或从静态类中调用它的GetInstance()方法。 `新的DateTimeFormatInfo()。MonthNames;`或`DateTimeFormatInfo.GetInstance()。MonthNames` – 2012-12-22 02:01:51

+1

我已更正评论中注释的问题(将来您可以编辑帖子)。 – user7116 2013-06-12 13:28:23

19

您可以使用下面的返回字符串数组包含月份名称

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames 
4

您可以从Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNamesDateTimeFormatInfo.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); 
} 

可能有一些问题与几个月中视日历型一年的数字,但我只是认为12个月,这个例子。

+0

出于某种原因,我抓取的代码使用了ListItem.Value属性的Invariant名称。不知道为什么,但你可能想用一个整数来代替。 – Greg 2008-11-24 20:26:57

5

尝试列举月份名称:

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

这是System.Globalization命名空间中。

希望有帮助!

+0

我使用CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName – 2011-11-02 09:49:21

12

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

using System.Globalization; 

for (int i = 0; i < 12; i++) { 
    Console.WriteLine(CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]); 
} 
0
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; 
19

这个方法可以让你月键值对列表应用到他们的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(); 
3
public IEnumerable<SelectListItem> Months 
{ 
    get 
    { 
    return Enumerable.Range(1, 12).Select(x => new SelectListItem 
    { 
     Value = x.ToString(), 
     Text = DateTimeFormatInfo.CurrentInfo.GetMonthName(x) 
    }); 
    } 
} 
3

检索月份名称的动态文化具体名单在C#LINQ的一种方式。

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

OR

在这个例子中一个匿名对象与月份和MONTHNAME属性创建

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个月。

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

这里是填充下拉列表以月为信用卡形式的一个很好的例子:

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. 
2

有点LINQ只是因为它非常简洁:

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

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

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