Como obter o nome do mês em C #?

Respostas:

167

Você pode usar o CultureInfo para obter o nome do mês. Você pode até obter o nome do mês curto, bem como outras coisas divertidas.

Eu sugiro que você os coloque em métodos de extensão, o que permitirá que você escreva menos código posteriormente. No entanto, você pode implementar como quiser.

Aqui está um exemplo de como fazer isso usando métodos de extensão:

using System;
using System.Globalization;

class Program
{
    static void Main()
    {

        Console.WriteLine(DateTime.Now.ToMonthName());
        Console.WriteLine(DateTime.Now.ToShortMonthName());
        Console.Read();
    }
}

static class DateTimeExtensions
{
    public static string ToMonthName(this DateTime dateTime)
    {
        return CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(dateTime.Month);
    }

    public static string ToShortMonthName(this DateTime dateTime)
    {
        return CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(dateTime.Month);
    }
}

Espero que isto ajude!

CodeLikeBeaker
fonte
5
Devo acrescentar que existe uma InvariantInfopropriedade que também pode ser usada. E, na minha opinião, o seguinte é um formato mais simples / legível para fazer isso: DateTimeFormatInfo.InvariantInfo.GetAbbreviatedMonthName(...)orDateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(...)
bsara
119

Use o especificador de formato "MMMM":

string month = dateTime.ToString("MMMM");
Jon Skeet
fonte
17
assumindo que você tem um encontro. se não:var month = new DateTime(1,i,1).ToString("MMMM");
Myster
14
string CurrentMonth = String.Format("{0:MMMM}", DateTime.Now)
George Stocker
fonte
Você não precisa do ToString ().
Richard Anthony Hein
5
Ou String.Format, na verdade. Apenas DateTime.Now.ToString ("MMMM") é mais simples.
Jon Skeet de
1
Eu teria sugerido isso também, mas você já tinha essa como outra resposta. O método de Gortok também demonstra o uso de marcadores para fazer a formatação, então acho que é um bom exemplo alternativo.
Richard Anthony Hein
7

Se você deseja apenas usar MonthName, faça referência a Microsoft.VisualBasic e ele está em Microsoft.VisualBasic.DateAndTime

//eg. Get January
String monthName = Microsoft.VisualBasic.DateAndTime.MonthName(1);
RobV
fonte
7

Supondo que seu encontro seja hoje. Espero que isso ajude você.

DateTime dt = DateTime.Today;

string thisMonth= dt.ToString("MMMM");

Console.WriteLine(thisMonth);
Binamra
fonte
-13
    private string MonthName(int m)
    {
        string res;
        switch (m)
        {
            case 1:
                res="Ene";
                break;
            case 2:
                res = "Feb";
                break;
            case 3:
                res = "Mar";
                break;
            case 4:
                res = "Abr";
                break;
            case 5:
                res = "May";
                break;
            case 6:
                res = "Jun";
                break;
            case 7:
                res = "Jul";
                break;
            case 8:
                res = "Ago";
                break;
            case 9:
                res = "Sep";
                break;
            case 10:
                res = "Oct";
                break;
            case 11:
                res = "Nov";
                break;
            case 12:
                res = "Dic";
                break;
            default:
                res = "Nulo";
                break;
        }
        return res;
    }
Angel Alvarado Sagel
fonte
10
Isso não responde à pergunta do OP, porque eles disseram: "Eu realmente não quero escrever uma declaração de switch enorme [...]" (grifo meu). Leia as perguntas em detalhes antes de escrever uma resposta.
buzina de