c# - sistema - ¿Hay una enumeración predefinida para Month en la biblioteca.NET?
sistema de biblioteca prestamos devoluciones (11)
Estoy buscando para ver si hay una enumeración oficial durante meses en el .NET Framework.
Me parece posible que haya uno, debido a cuán común es el uso del mes, y porque hay otras enumeraciones similares en el marco .net.
Por ejemplo, hay una enumeración de los días de la semana, System.DayOfWeek, que incluye lunes, martes, etc.
Me pregunto si hay alguno para los meses del año, es decir, enero, febrero, etc.
¿Alguien sabe?
Estoy buscando para ver si hay una enumeración oficial durante meses en el .NET Framework.
No.
Heres uno que preparé antes. (Versión C #)
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
}
¿Qué estás tratando de lograr exactamente?
si todo lo que quiere es doce cadenas con los meses del año detallados, entonces eso está disponible a través de una cadena de formato personalizada, aplicada para cualquier instancia de una fecha y hora,
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)
si solo desea poder especificar el mes como una propiedad enumerada de otro tipo de objeto, la propiedad Month de un campo DateTime devuelve un número entero de 1 a 12 ...
Algunos calendarios sí tienen más de 12 meses: http://en.wikipedia.org/wiki/Month pero no puedo decir si fue la razón por la que MS no creó una enumeración en .NET.
Para los perezosos como yo, a quienes les hubiera gustado copiar / pegar, en 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
Estaría buscando algo así para codificar, ya que
if (DateTime.Now.Month != 1) // can''t run this test in January.
tiene este número mágico de 1 en él. mientras
if (DateTime.Now.Month != DateTime.MonthsOfYear.January)
es autodocumentado
No lo sé con certeza, pero mi presentimiento es no. DateTime.Month devuelve un número entero. Si existiera dicha enumeración, probablemente DateTime la devolvería.
No, no hay.
No, pero si quiere el nombre de un mes, puede usar:
CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName (DateTime.Now.Month);
que devolverá una representación de cadena (del mes actual, en este caso). Tenga en cuenta que GetMonth
toma argumentos del 1 al 13 - Enero es 1, 13 es una cadena en blanco.
Sí, ciertamente lo hay. Es parte del espacio de nombres Microsoft.VisualBasic ...
Microsoft.VisualBasic.MonthName
Y para aquellos de ustedes que tienen un problema con este espacio de nombres, deben entender que realmente es .NET, y no va a ninguna parte .
Para el registro, la función MonthName
llama internamente a los siguientes ...
Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName
Se encontró uno en la enumeración "MonthNamesType" de este espacio de nombres: Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.Exchange2007
La ubicación es un poco atemorizante, pero está ahí, no obstante.
Una enumeración sería bastante útil, pero puede obtener el resultado deseado con un formato:
DateTime myDateTimeObject=DateTime.Now; //(for example)
string monthName = myDateTimeObject.ToString("MMMM");
Esto devuelve el nombre completo del mes (enero, febrero, etc.). Utilice myDateTimeObject.ToString("MMM")
para el nombre corto (enero, febrero, marzo, etc.).
Si tiene un número de mes particular, mnthNum
, sin DateTime
, siempre podría usar algo como esto:
string monthName=(new DateTime(2000,mnthNum,1)).ToString("MMMM");
o
string monthName=((new DateTime(2000,1,1)).AddMonths(mnthNum-1)ToString("MMMM");
Pero eso parece un poco desordenado. El primer ejemplo requiere que mnthNum
esté entre 1 y 12. El segundo ejemplo permite (casi) cualquier número de mes y no está restringido a 1 a 12.
DateTimeFormatInfo.CurrentInfo.MonthNames
(no es una enumeración, pero creo que la instancia de CurrentInfo de DateTimeFormatInfo es lo que está buscando en general). Si desea una lista desplegable, puede compilarla de esta manera:
List<string> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.Take(12).ToList();
var monthSelectList = monthNames.Select(
m => new { Id = monthNames.IndexOf(m) + 1, Name = m });