2008-11-24 89 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。

相關問題