2008-11-24 9 views

Répondre

134

Vous pouvez utiliser le DateTimeFormatInfo pour obtenir cette information:

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

ou pour obtenir tous les noms:

string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames; 

Vous pouvez également créer un nouveau DateTimeFormatInfo ba sed sur un CultureInfo avec DateTimeFormatInfo.GetInstance ou vous pouvez utiliser la propriété CultureInfo.DateTimeFormat de la culture actuelle. Gardez à l'esprit que les calendriers en .Net supportent jusqu'à 13 mois, donc vous obtiendrez une chaîne vide supplémentaire à la fin pour les calendriers avec seulement 12 mois (comme ceux trouvés en en-US ou en fr par exemple).

+7

Votre deuxième exemple ne sera pas compilé. Vous devez créer une nouvelle instance de 'DateTimeFormatInfo' ou appeler sa méthode' GetInstance() 'à partir de la classe statique .e.g. 'new DateTimeFormatInfo(). MonthNames;' ou 'DateTimeFormatInfo.GetInstance(). MonthNames' –

+1

J'ai corrigé les problèmes signalés par les commentaires (à l'avenir, vous pouvez simplement modifier la publication). – user7116

19

Vous pouvez utiliser les éléments suivants pour retourner un tableau de chaîne contenant les noms de mois

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

Vous pouvez obtenir une liste des mois localisés à partir de Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames et des mois invariants à partir de 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); 
} 

Il pourrait y avoir un certain problème avec le nombre de mois dans une année en fonction du type de calendrier, mais je viens pris 12 mois dans cet exemple.

+0

Pour une raison quelconque, le code que j'ai saisi utilisait le nom Invariant pour la propriété ListItem.Value. Vous ne savez pas pourquoi, mais vous pourriez vouloir utiliser un nombre entier pour cela. – Greg

5

Essayez les noms de l'énumération mois:

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

Il est dans l'espace de noms System.Globalization.

Espérons que ça aide!

+0

J'utilise CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName –

12

Ils sont définis en tant que tableau dans les espaces de noms de globalisation.

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

Cette méthode vous permettra d'appliquer une liste de paires de valeurs clés de mois à leurs homologues int. Nous le générons avec une seule ligne en utilisant Enumerable Ranges et LINQ. Hourra, le code de golf LINQ!

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

Pour l'appliquer à une liste déroulante ASP:

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

Comme l'utilisation de Enumerable.Range, je vais l'utiliser avec une liste de MVC SelectListItems – John

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

Une façon de récupérer une culture dynamique liste spécifique des noms de mois à C# avec LINQ.

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

OU

Dans cet exemple, un objet anonyme est créé avec une propriété par mois et MonthName

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

PS: Nous utilisons la méthode TakeWhile car le tableau MonthNames contient une vide le 13ème mois.

0
string[] monthNames = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames; 

foreach (string m in monthNames) // writing out 
{ 
    Console.WriteLine(m); 
} 

Sortie:

January 
February 
March 
April 
May 
June 
July 
August 
September 
October 
November 
December 

Mise à jour: Do noter que pour les différentes cultures locales /, la sortie pourrait ne pas être en anglais. Je n'ai pas testé cela avant.

Pour anglais uniquement:

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

Voici un bon exemple pour remplir une liste déroulante avec des mois pour le formulaire de carte de crédit:

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 

Crée ce qui suit localisé dans la langue actuelle, par exemple :

01 - January 
02 - February 
etc. 
2

Un petit LINQ juste parce qu'il est magnifiquement concis:

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

Vous avez besoin de la clause Where car le calendrier renvoie un nom du 13ème mois (vide en anglais). L'index renvoie l'index dans IEnumerable, vous avez donc besoin d'un +1 pour l'index du mois actuel.