Существует ли предопределенное перечисление для месяца в библиотеке .NET? - PullRequest
93 голосов
/ 22 мая 2009

Я смотрю, есть ли официальное перечисление по месяцам в .net framework.

Мне кажется, что он существует, из-за того, как часто используется месяц, и из-за того, что есть другие перечисления в .net framework.

Например, существует перечисление дней недели, System.DayOfWeek, которое включает понедельник, вторник и т. Д.

Мне интересно, есть ли такой месяц в году, то есть в январе, феврале и т. Д.?

Кто-нибудь знает?

Ответы [ 11 ]

113 голосов
/ 22 мая 2009

Нет, но если вам нужно название месяца, вы можете использовать:

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

, который будет возвращать строковое представление (в данном случае текущего месяца). Обратите внимание, что GetMonth принимает аргументы от 1 до 13 - январь равен 1, 13 - пустая строка.

71 голосов
/ 22 мая 2009

Нет, нет.

34 голосов
/ 30 марта 2011

Я смотрю, есть ли официальное перечисление за месяцы в .net framework.

номер

Вот тот, который я приготовил ранее. (Версия 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
}
31 голосов
/ 19 февраля 2011

DateTimeFormatInfo.CurrentInfo.MonthNames (не перечисление, но я думаю, что экземпляр DateTimeFormatInfo CurrentInfo - это то, что вы ищете в общем). Если вы хотите раскрывающийся список, вы можете создать его следующим образом:

List<string> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.Take(12).ToList();
var monthSelectList = monthNames.Select(
   m => new { Id = monthNames.IndexOf(m) + 1, Name = m });
12 голосов
/ 22 мая 2009

Найден один в перечислении "MonthNamesType" этого пространства имен: Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.Exchange2007

Место немного пугает, но, тем не менее, оно есть.

9 голосов
/ 22 мая 2009

Что именно вы пытаетесь достичь?

Если все, что вам нужно, это двенадцать строк с указанием месяцев года, то это доступно через строку пользовательского формата - применяется для любого экземпляра даты и времени,

  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)

если вы просто хотите указать месяц как перечислимое свойство какого-либо другого типа объекта, тогда свойство Month поля DateTime возвращает целое число от 1 до 12 ...

3 голосов
/ 19 января 2010

Да, конечно, есть. Это часть пространства имен Microsoft.VisualBasic ...

Microsoft.VisualBasic.MonthName

И для тех из вас, у кого проблема с этим пространством имен, вы должны понимать, что это действительно .NET, и он никуда не денется .

Для записи, функция MonthName внутренне вызывает следующее ...

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName
2 голосов
/ 15 декабря 2010

У некоторых календарей действительно больше 12 месяцев: http://en.wikipedia.org/wiki/Month, но я не могу сказать, была ли это причина, по которой MS не создала перечисление в .NET.

Для таких ленивых, как я, которые хотели бы скопировать / вставить в 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
1 голос
/ 19 января 2010

Я бы искал что-то вроде этого для кода, как

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

содержит магическое число 1. в то время как

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

самодокументируется

1 голос
/ 22 мая 2009

Не знаю наверняка, но моя догадка - нет. DateTime.Month возвращает целое число. Если бы такое перечисление было, оно, вероятно, было бы возвращено DateTime.

...