2009-06-10 24 views
73

¿Cómo se puede encontrar el nombre del mes en C#? No quiero escribir una gran declaración switch o una declaración if en el mes int. En VB.Net puede usar MonthName(), pero ¿qué pasa con C#?¿Cómo obtener el nombre del mes en C#?

+0

Posible duplicado de [Mejor manera de convertir un entero en el nombre del mes en C#?] (Http://stackoverflow.com/questions/218908/best-way-to-turn-an- entero en un nombre de mes en c) – bluish

Respuesta

143

Puede utilizar el CultureInfo para obtener el nombre del mes. Incluso puede obtener el nombre del mes corto, así como otras cosas divertidas.

Sugiero que los incluya en métodos de extensión, lo que le permitirá escribir menos código más tarde. Sin embargo, puede implementar lo que quiera.

Aquí es un ejemplo de cómo hacerlo utilizando métodos de extensión:

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 esto ayude!

+4

¿Puedo agregar que hay una propiedad 'InvariantInfo' que también se puede usar? Y, en mi opinión, el siguiente es un formato más simple/legible para hacer esto: 'DateTimeFormatInfo.InvariantInfo.GetAbbreviatedMonthName (...)' o 'DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName (...)' – bsara

104

uso del formato "mmmm" especificador:

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

suponiendo que tiene una fecha. si no: 'var month = new DateTime (1, i, 1) .ToString (" MMMM ");' – Myster

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

No es necesario el ToString(). –

+5

O String.Format, en realidad. Solo DateTime.Now.ToString ("MMMM") es más simple. –

+1

Hubiera sugerido eso también, pero ya lo tenías como otra respuesta. El método de Gortok también demuestra el uso de marcadores de posición para hacer el formateo, por lo que creo que es un buen ejemplo alternativo. –

5

Si lo que desea es utilizar MonthName después hacer referencia a Microsoft.VisualBasic y está en Microsoft.VisualBasic.DateAndTime

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

Suponiendo que su fecha es hoy en día. Espero que esto te ayude.

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

Esto no responde a la pregunta del OP, porque dijeron: "Realmente ** no ** quiero escribir una declaración de interruptor enorme [...]" (énfasis mío). Por favor, lea las preguntas en detalle antes de escribir una respuesta. – honk

Cuestiones relacionadas