Globalization

Obtener los nombres de meses del calendario sin hardcoding en C#

En varias aplicaciones que proveen un dropdownlist para escoger el nombre de un Mes, he visto que los desarrolladores llenan los nombres de los meses a través de un archivo de recursos, o peor, hard-codeando los valores. Esto no es necesario, ya que los nombres de los meses del calendario de cada cultura pueden ser accesados a través de un objeto CultureInfo que represente la cultura del país/idioma para el cual queremos obtener los meses.

Lo primero es agregar un using de System.Globalization.

El siguiente metodo va a imprimir todos los meses del año del calendario del objeto CultureInfo que le pasemos.

Generalmente vamos a querer que los nombres empiecen con mayúsculas, así que también estoy usando el método ToTitleCase, que va a formatear correctamente los nombres de los meses a TitleCase según el formato correcto de la cultura tambien.

public static void ImprimirNombreMeses(CultureInfo cultura)
{

// Primera manera, LINQ
var qry = from m in cultura.DateTimeFormat.MonthNames
select cultura.TextInfo.ToTitleCase(m);

foreach (var mes in qry)
{
Console.WriteLine(mes);
}

// Segunda manera, tipico foreach
foreach(string mes in cultura.DateTimeFormat.MonthNames)
{
Console.WriteLine(cultura.TextInfo.ToTitleCase(mes));
}

Console.ReadLine();
}

La primera parte del método usa LINQ. Si estás usando una version anterior al framework 3.5, tendrías que ciclar usando un foreach.

El resultado se ve así:

Nombres de meses en objeto CultureInfo

Nombres de meses en objeto CultureInfo

Esta es una de las tantas razones por las cuales me gusta el .NET Framework. Si lo necesitas, probablemente ya esté integrado.

 Scroll to top