.NET库中是否有针对Month的预定义枚举?

时间:2009-05-22 19:21:28

标签: c# .net datetime enumeration

我正在查看.net框架中是否存在数月的官方枚举。

我觉得有一个,因为月份的使用有多常见,并且因为.net框架中还有其他这样的枚举。

例如,有一个星期几的枚举,System.DayOfWeek,包括星期一,星期二等。

我想知道一年中是否有一个月,即1月,2月等?

有人知道吗?

11 个答案:

答案 0 :(得分:113)

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

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

将返回一个字符串表示(在本例中为当前月份)。请注意,GetMonth从1到13接受参数 - 1月是1,13是空字符串。

答案 1 :(得分:72)

不,没有。

答案 2 :(得分:34)

  

我正在寻找是否有   几个月的官方列举   .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
}

答案 3 :(得分:31)

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

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

答案 4 :(得分:12)

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

这个位置有点吓人,但它确实存在。

答案 5 :(得分:9)

你究竟想要完成什么?

如果您想要的是十二个字符串,其中一年中的月份已拼写出来,那么可通过自定义格式字符串获取 - 适用于日期时间的任何实例,

  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)

如果您只想将月份指定为某个其他对象类型的枚举属性,则DateTime字段的Month属性将返回1到12之间的整数...

答案 6 :(得分:3)

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

Microsoft.VisualBasic.MonthName

对于那些对此命名空间有疑问的人,您应该了解it truly is .NET, and it is not going anywhere

对于记录,MonthName函数在内部调用以下内容...

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName

答案 7 :(得分:2)

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

对于像我这样喜欢复制/粘贴的懒人,在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

答案 8 :(得分:1)

我不确定,但我的预感不是。 DateTime.Month返回一个整数。如果有这样的枚举,它可能会被DateTime返回。

答案 9 :(得分:1)

我会寻找像这样的东西来编码,如

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

的神奇数字为1。而

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

是自我记录的

答案 10 :(得分:0)

枚举非常有用,但您可以使用以下格式获得所需的结果:

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

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

如果您有特定月份号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.