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?
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.
Non, il n'y en a pas.
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
}
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 });
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à.
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 ...
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
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
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.
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é
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.