Pergunta

Eu estou olhando para ver se há uma enumeração oficial meses no .NET Framework.

Parece possível para mim que há um, por causa de quão comum o uso de mês é, e porque há outras tais enumerações no .NET Framework.

Por exemplo, não é uma enumeração para os dias na semana, System.DayOfWeek, que inclui segunda-feira, terça-feira, etc ..

Eu estou querendo saber se há um para os meses do ano, ou seja, janeiro, fevereiro, etc?

Alguém sabe?

Foi útil?

Solução

Não é, mas se você quiser o nome de um mês, você pode usar:

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

que irá retornar uma representação de cadeia (do corrente mês, neste caso). Note-se que GetMonth leva argumentos de 1 a 13 -. Janeiro é 1, 13 é uma cadeia em branco

Outras dicas

Não, não há.

Eu estou olhando para ver se há uma enumeração oficial meses no NET Framework.

Não.

Aqui está um que eu preparado anteriormente. (C # Version)

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 (não um enum, mas eu acho que CurrentInfo instância de DateTimeFormatInfo é o que você está procurando em geral). Se você quiser uma lista drop-down você pode construí-lo como este:

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

Encontrada uma na enumeração "MonthNamesType" deste namespace: Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.Exchange2007

A localização de kinda sustos mas está lá, no entanto.

O que exatamente você está tentando realizar?

Se tudo que você quer é de doze cordas com os meses do ano enunciados, em seguida, que está disponível através de um formato personalizado - aplicados por qualquer instância de um 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)

Se você quer apenas ser capaz de especificar o mês como uma propriedade enumerada de algum outro tipo de objeto, então a propriedade mês de um campo DateTime retorna um inteiro de 1 a 12 ...

Sim, certamente há. É parte do Microsoft.VisualBasic namespace ...

Microsoft.VisualBasic.MonthName

E para aqueles de vocês que têm um problema com este namespace, você deve compreender que ele realmente é .NET, e não vai a lugar nenhum .

Para o registro, a função MonthName chama internamente o seguinte ...

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName

Alguns calendário realmente têm mais de 12 meses: http://en.wikipedia.org/wiki/ mês mas eu não posso dizer se foi a MS razão não construiu um enum em .NET.

Para os preguiçosos como eu, que teria gostado de um copy / paste, em 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

Eu não sei ao certo, mas meu palpite não é. DateTime.Month retorna um número inteiro. Se houvesse tal uma enumeração, ele provavelmente iria ser devolvido pelo DateTime.

Eu estaria procurando algo assim para código com, como

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

tem esse número mágico de 1 nele. enquanto

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

é auto-documentado

Uma enumeração seria bastante útil, mas você pode obter o resultado desejado com um formato:

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

Isso retorna o nome completo mês (Janeiro, Fevereiro, etc.). Use myDateTimeObject.ToString("MMM") para nome curto (Jan, Fev, Mar, etc.).

Se você tem um número determinado mês, mnthNum, sem qualquer DateTime, você poderia sempre usar algo como isto:

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

ou

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

Mas isso parece um pouco confuso. O primeiro exemplo que requer mnthNum é entre 1 e 12. O segundo exemplo permite uma (quase) qualquer número de meses e não se restringe a 1 a 12.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top