Existe-t-il une énumération prédéfinie pour Month in the.NET bibliothèque?
Je cherche à voir s'il existe une énumération officielle pendant des mois dans le framework.net.
Il me semble possible qu'il y en ait un, à cause de la fréquence de l'utilisation de month, et parce qu'il existe d'autres énumérations de ce type dans le framework. net.
Par exemple, il y a une énumération pour les jours de la semaine, System.DayOfWeek, qui comprend lundi, 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?
Quelqu'un le sait?
11 réponses
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 retournera une représentation de chaîne (du mois en cours, dans ce cas). Notez que GetMonth
prend des arguments de 1 à 13-Janvier est 1, 13 est une chaîne vide.
Je cherche à voir s'il y a un dénombrement officiel pendant des mois dans le . NET framework.
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
}
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 construire comme ceci:
List<string> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.Take(12).ToList();
var monthSelectList = monthNames.Select(
m => new { Id = monthNames.IndexOf(m) + 1, Name = m });
En a trouvé un dans l'énumération "MonthNamesType" de cet espace de noms: Microsoft.ServiceModel.Canal.Courrier.ExchangeWebService.Exchange2007
L'emplacement fait un peu peur mais il est néanmoins là.
Qu'essayez-vous d'accomplir exactement?
Si tout ce que vous voulez 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ée pour toute 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 en tant que 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...
Oui, il y en a certainement. Il fait partie de Microsoft.Espace de noms 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 ça ne va nulle part .
Pour l'enregistrement, la fonction MonthName
appelle en interne ce qui suit...
Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName
Certains calendriers ont en effet plus de 12 mois: http://en.wikipedia.org/wiki/Month mais je ne peux pas dire si C'était la raison pour laquelle MS n'a pas construit une é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
Je ne sais pas avec certitude, mais mon intuition est non. DateTime.Mois qui renvoie un entier. S'il y avait une telle énumération, elle serait probablement retournée par DateTime.
Je chercherais quelque chose comme ça à coder avec, comme
if (DateTime.Now.Month != 1) // can't run this test in January.
A ce nombre magique de 1 dedans. considérant ce qui suit
if (DateTime.Now.Month != DateTime.MonthsOfYear.January)
Est auto-documentant
Enum 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");
Renvoie le nom complet du mois (janvier, février, ... ). Utilisez myDateTimeObject.ToString("MMM")
pour le nom court (Jan, Feb, Mar, etc.).
Si vous avez un particulier mois nombre, mnthNum
, sans aucun 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 désordonné. Le premier exemple exige que mnthNum
soit compris entre 1 et 12. Le deuxième exemple permet de (presque) n'importe quel numéro de mois et n'est pas limité à 1 à 12.