2009-06-10 16 views
73

Come si fa a trovare il nome del mese in C#? Non voglio scrivere un'enorme affermazione switch o una dichiarazione if nel mese int. In VB.Net è possibile utilizzare MonthName(), ma che dire di C#?Come ottenere il nome del mese in C#?

+0

Possibile duplicato del [Modo migliore per trasformare un intero in nome di un mese in C#?] (Http://stackoverflow.com/questions/218908/best-way-to-turn-an- intero-in-un-mese-nome-in-c) – bluish

risposta

143

È possibile utilizzare il CultureInfo per ottenere il nome del mese. Puoi anche ottenere il nome del mese breve e altre cose divertenti.

Vorrei suggerire di inserire questi in metodi di estensione, che ti permetteranno di scrivere meno codice in seguito. Tuttavia puoi implementare come preferisci.

Ecco un esempio di come farlo utilizzando metodi di estensione:

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

Spero che questo aiuti!

+4

Potrei aggiungere che esiste una proprietà 'InvariantInfo' che può essere utilizzata pure. E, a mio parere, il seguente è un formato più semplice/leggibile per fare ciò: 'DateTimeFormatInfo.InvariantInfo.GetAbbreviatedMonthName (...)' o 'DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName (...)' – bsara

104

Utilizzare il formato "MMMM" identificatore:

string month = dateTime.ToString("MMMM"); 
+16

assumendo che tu abbia una data. in caso contrario: 'var month = new DateTime (1, i, 1) .ToString (" MMMM ");' – Myster

9
string CurrentMonth = String.Format("{0:MMMM}", DateTime.Now) 
+0

Non è necessario il ToString(). –

+5

Oppure String.Format, in realtà. Just DateTime.Now.ToString ("MMMM") è più semplice. –

+1

Avrei suggerito anche quello, ma l'hai già avuto come un'altra risposta. Il metodo di Gortok dimostra anche l'uso di segnaposti per fare la formattazione, quindi penso che sia un buon esempio alternativo. –

5

Se si desidera utilizzare MonthName quindi fare riferimento a Microsoft.VisualBasic ed è in Microsoft.VisualBasic.DateAndTime

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

Supponendo la data di oggi. Spero che questo ti aiuti.

DateTime dt = DateTime.Today; 

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

Console.WriteLine(thisMonth); 
-7
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; 
    } 
+8

Questo non risponde alla domanda dell'OP, perché hanno detto: "Io davvero ** non ** voglio scrivere un'enorme dichiarazione di commutazione [...]" (enfasi mia). Si prega di leggere le domande in dettaglio prima di scrivere una risposta. – honk

Problemi correlati