.NET库中是否有预定义的月份枚举?

我正在查看在.net框架中是否有几个月的官方枚举。

我似乎有可能有一个,因为月份的使用有多普遍,而且.net框架中还有其他这样的枚举。

例如,本周的date是System.DayOfWeek,包括星期一,星期二等。

我想知道是否有一个月的一年,即一月,二月等?

有人知道吗?

没有,但如果你想要一个月的名字,你可以使用:

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName (DateTime.Now.Month); 

这将返回一个string表示forms(在这种情况下是当前月份)。 请注意GetMonth从1到13的参数 – 1月是GetMonth是一个空白string。

不,没有。

DateTimeFormatInfo.CurrentInfo.MonthNames (不是一个枚举,但我认为CurrentTime的DateTimeFormatInfo实例是你在寻找一般)。 如果你想要一个下拉列表,你可以像这样构build它:

 List<string> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.Take(12).ToList(); var monthSelectList = monthNames.Select( m => new { Id = monthNames.IndexOf(m) + 1, Name = m }); 

我正在查看在.net框架中是否有几个月的官方枚举。

没有。

我之前准备的是一个。 (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 } 

在这个命名空间的枚举“MonthNamesType”中find一个:Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.Exchange2007

地点有点恐慌,但它仍然在那里。

你究竟想要完成什么?

如果所有你想要的是十二个string与一年中的月份拼写出来,那么可以通过自定义格式string – 适用于任何date时间的实例,

  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) 

如果您只是希望能够将月份指定为某个其他对象types的枚举属性,则DateTime字段的Month属性会返回1到12之间的整数…

我不知道,但我的直觉是不。 DateTime.Month返回一个整数。 如果有这样的枚举,它可能会由DateTime返回。

是的,当然有。 它是Microsoft.VisualBasic命名空间的一部分…

 Microsoft.VisualBasic.MonthName 

对于那些对这个命名空间有问题的人,你应该明白它确实是.NET,而且它不会在任何地方 。

logging, MonthName函数内部调用以下…

 Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName 

一些日历确实有超过12个月的时间: http : //en.wikipedia.org/wiki/Month,但我不能说这是MS没有在.NET中build立一个枚举的原因。

对于像我这样懒的人来说,想在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 

我会寻找这样的代码,如

  if (DateTime.Now.Month != 1) // can't run this test in January. 

有这个神奇的数字1。 而

  if (DateTime.Now.Month != DateTime.MonthsOfYear.January) 

是自我logging

一个枚举将是相当有用的,但你可以得到一个格式所需的结果:

 DateTime myDateTimeObject=DateTime.Now; //(for example) string monthName = myDateTimeObject.ToString("MMMM"); 

这将返回完整的月份名称(1月,2月等)。 使用myDateTimeObject.ToString("MMM")作为简称(1月,2月,3月等)。

如果你有一个特定的月份号, mnthNum ,没有任何DateTime ,你总是可以使用这样的东西:

 string monthName=(new DateTime(2000,mnthNum,1)).ToString("MMMM"); 

要么

 string monthName=((new DateTime(2000,1,1)).AddMonths(mnthNum-1)ToString("MMMM"); 

但是这似乎有点混乱。 第一个例子要求mnthNum在1和12之间。第二个例子允许(几乎)任何月份数字,并且不限于1到12。