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


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

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

например, перечисление дней в неделю, система.День недели, который включает в себя понедельник, вторник и т. д..

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

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

11 88

11 ответов:

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

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

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

нет, нет.

Я ищу, чтобы увидеть, если есть официальные перечисления в течение месяца в .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
}

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 });

найдено одно в перечислении "MonthNamesType" этого пространства имен: Microsoft.Средство servicemodel.Каналы.Почта.ExchangeWebService.Exchange2007

расположение своего рода пугает, но это там, тем не менее.

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

если все, что вам нужно, это двенадцать строк с месяцами года, то это доступно через строку пользовательского формата-применяется для любого экземпляра 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)

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

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

Microsoft.VisualBasic.MonthName

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

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

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName

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

Я не знаю точно, но мне кажется нет. значение datetime.Месяц возвращает целое число. Если бы такое перечисление было, оно, вероятно, было бы возвращено DateTime.

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

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

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

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

- это самодокументируемый

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

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 is между 1 и 12. Второй пример позволяет (почти) любое число месяц и не ограничивается от 1 до 12.