Есть ли предопределенное перечисление месяца в библиотеке .NET?

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

Нет, нет.

Ответ 3

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

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

Ответ 4

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

Нет.

Вот что я приготовил раньше. (Версия С#)

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
}

Ответ 5

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

В любом случае, местоположение пугает, но оно тем не менее.

Ответ 6

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

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

  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...

Ответ 7

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

Ответ 8

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

Microsoft.VisualBasic.MonthName

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

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

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName

Ответ 9

У некоторых календарей действительно есть более 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

Ответ 10

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

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

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

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

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

Ответ 11

Перечисление было бы весьма полезным, но вы можете получить желаемый результат в формате:

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

Это возвращает полное имя месяца (январь, февраль и т.д.). Используйте myDateTimeObject.ToString("MMM") для краткого имени (Jan, Feb, Mar и т.д.).

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

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

или

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

Но это кажется немного грязным. В первом примере требуется, чтобы mnthNum находилось между 1 и 12. Второй пример позволяет (почти) номер месяца и не ограничен 1-12.