web-dev-qa-db-fra.com

Existe-t-il une énumération prédéfinie pour Month dans la bibliothèque .NET?

Je cherche à voir s'il y a une énumération officielle pendant des mois dans le cadre .net.

Il me semble possible qu'il y en ait un, en raison de la fréquence d'utilisation du mois, et parce qu'il existe d'autres énumérations de ce type dans le cadre .net.

Par exemple, il existe une énumération pour les jours de la semaine, System.DayOfWeek, qui inclut le lundi, le mardi, etc.

Je me demande s'il y en a un pour les mois de l'année, c'est-à-dire janvier, février, etc.?

Est-ce que quelqu'un sait?

95
Mark Rogers

Il n'y en a pas, mais si vous voulez le nom d'un mois, vous pouvez utiliser:

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName (DateTime.Now.Month);

qui renverra une représentation sous forme de chaîne (du mois en cours, dans ce cas). Notez que GetMonth prend les arguments de 1 à 13 - janvier est 1, 13 est une chaîne vide.

113
Andy Mikula

Non, il n'y en a pas.

72
David Nelson

Je cherche à voir s'il y a une énumération officielle pendant des mois dans le cadre .net.

Non.

Voici celui que j'ai préparé plus tôt. (Version C #)

public enum Month
{
    NotSet = 0,
    January = 1,
    February = 2,
    March = 3,
    April = 4,
    May = 5,
    June = 6,
    July = 7,
    August = 8,
    September = 9,
    October = 10,
    November = 11,
    December = 12
}
36
wal

DateTimeFormatInfo.CurrentInfo.MonthNames (pas une énumération, mais je pense que l'instance CurrentInfo de DateTimeFormatInfo est ce que vous recherchez en général). Si vous voulez une liste déroulante, vous pouvez la créer comme ceci:

List<string> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.Take(12).ToList();
var monthSelectList = monthNames.Select(
   m => new { Id = monthNames.IndexOf(m) + 1, Name = m });
31
Doug Lampe

Trouvé dans l'énumération "MonthNamesType" de cet espace de noms: Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.Exchange2007

L'endroit fait un peu peur mais c'est quand même là.

12
vidalsasoon

Qu'essayez-vous exactement d'accomplir?

si tout ce que vous voulez, c'est douze chaînes avec les mois de l'année épelés, alors cela est disponible via une chaîne de format personnalisé - appliqué pour n'importe quelle instance d'un datetime,

  DateTime dt = DateTime.Parse("12 January 2009";
   dt.ToString("MMM");  // prints "Jan" 
                        // (or the right abbrev is in current culture)
   dt.ToString("MMMM"); // prints "January" 
                        // (or correct sp in current culture)

si vous voulez simplement pouvoir spécifier le mois comme propriété énumérée d'un autre type d'objet, la propriété Month d'un champ DateTime renvoie un entier de 1 à 12 ...

9
Charles Bretana

Oui, certainement. Cela fait partie de l'espace de noms Microsoft.VisualBasic ...

Microsoft.VisualBasic.MonthName

Et pour ceux d'entre vous qui ont un problème avec cet espace de noms, vous devez comprendre que c'est vraiment .NET, et cela ne va nulle part .

Pour mémoire, la fonction MonthName appelle en interne ce qui suit ...

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName
3
Josh Stodola

Certains calendriers ont en effet plus de 12 mois: http://en.wikipedia.org/wiki/Month mais je ne peux pas dire si c'est la raison pour laquelle MS n'a pas construit d'énumération dans .NET .

Pour les paresseux comme moi qui auraient aimé un copier/coller, en VB:

Public Enum MonthsOfYear
    January = 1
    February = 2
    March = 3
    April = 4
    May = 5
    June = 6
    July = 7
    August = 8
    September = 9
    October = 10
    November = 11
    December = 12
End Enum
2
Francois Gagnon

Je ne sais pas avec certitude, mais mon intuition est non. DateTime.Month renvoie un entier. S'il y avait une telle énumération, elle serait probablement retournée par DateTime.

1
Scott Wisniewski

Je chercherais quelque chose comme ça pour coder, comme

        if (DateTime.Now.Month != 1) // can't run this test in January.

a ce nombre magique de 1 en elle. tandis que

        if (DateTime.Now.Month != DateTime.MonthsOfYear.January) 

est auto-documenté

1
Jadawin

Une énumération serait plutôt utile, mais vous pouvez obtenir le résultat souhaité avec un format:

DateTime myDateTimeObject=DateTime.Now; //(for example)
string monthName = myDateTimeObject.ToString("MMMM");

Cela renvoie le nom complet du mois (janvier, février, etc.). Utilisez myDateTimeObject.ToString("MMM") pour le nom court (Jan, Feb, Mar, etc.).

Si vous avez un numéro de mois particulier, mnthNum, sans DateTime, vous pouvez toujours utiliser quelque chose comme ceci:

string monthName=(new DateTime(2000,mnthNum,1)).ToString("MMMM");

ou

string monthName=((new DateTime(2000,1,1)).AddMonths(mnthNum-1)ToString("MMMM");

Mais cela semble un peu compliqué. Le premier exemple requiert que mnthNum soit compris entre 1 et 12. Le deuxième exemple permet (presque) n'importe quel nombre de mois et n'est pas limité à 1 à 12.

0
keith