92 votes

Comment lister tous les noms de mois, par exemple pour une combinaison ?

Pour l'instant, je crée un DateTime pour chaque mois et le formater de manière à ce qu'il ne contienne que le mois.
Existe-t-il une autre ou une meilleure façon de procéder ?

184voto

Yona Points 5205

Vous pouvez utiliser le DateTimeFormatInfo pour obtenir ces informations :

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

ou pour obtenir tous les noms :

string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames;

Vous pouvez également instancier un nouveau DateTimeFormatInfo sur la base d'un CultureInfo con DateTimeFormatInfo.GetInstance ou vous pouvez utiliser la méthode de la culture actuelle CultureInfo.DateTimeFormat propriété.

var dateFormatInfo = CultureInfo.GetCultureInfo("en-GB").DateTimeFormat;

Gardez à l'esprit que les calendriers dans .Net prennent en charge jusqu'à 13 mois, vous obtiendrez donc une chaîne vide supplémentaire à la fin pour les calendriers avec seulement 12 mois (tels que ceux trouvés dans en-US ou fr par exemple).

7 votes

Votre deuxième exemple ne sera pas compilé. Vous devez créer une nouvelle instance de DateTimeFormatInfo ou appeler son GetInstance() de la classe statique, par exemple new DateTimeFormatInfo().MonthNames; o DateTimeFormatInfo.GetInstance().MonthNames

2 votes

J'ai corrigé les problèmes signalés dans les commentaires (à l'avenir, il vous suffira d'éditer le message).

2 votes

Note : J'ai dû utiliser la réponse avec la mention Enumerable.Range parce que DateTimeFormatInfo.MonthNames renvoie un tableau de 13 éléments, donc si vous .Select sur ce point, vous obtenez un article vide à la fin.

39voto

mmmeff Points 174

Cette méthode vous permet d'appliquer une liste de paires clé/valeur de mois à leur int des contreparties. Nous le générons en une seule ligne en utilisant Enumerable Ranges et LINQ. Hourra, le code-golfing 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 votes

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

24voto

Rohan West Points 5914

Vous pouvez utiliser ce qui suit pour renvoyer un tableau de chaînes de caractères contenant les noms de mois

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames

12voto

Dylan Beattie Points 23222

Ils sont définis sous la forme d'un tableau dans l'espace de noms Globalization.

using System.Globalization;

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

7voto

Zachary Yates Points 4952

Essayez d'énumérer les noms de mois :

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

Il se trouve dans l'espace de noms System.Globalization.

J'espère que cela vous aidera !

0 votes

J'utilise CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X