108

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

对我来说似乎有可能存在一个,因为月份的使用非常普遍,并且因为 .net 框架中还有其他此类枚举。

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

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

有人知道吗?

4

12 回答 12

123

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

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

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

于 2009-05-22T19:27:57.207 回答
83

不,没有。

于 2009-05-22T19:27:29.967 回答
48

我正在查看.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
}
于 2011-03-30T02:59:48.237 回答
30

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 });
于 2011-02-19T01:45:00.643 回答
13

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

位置有点吓人,但它仍然存在。

于 2009-05-22T19:36:26.097 回答
10

你到底想完成什么?

如果您想要的只是十二个字符串,其中包含一年中的月份,那么可以通过自定义格式字符串获得 - 适用于日期时间的任何实例,

  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 的整数...

于 2009-05-22T19:29:00.900 回答
3

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

Microsoft.VisualBasic.MonthName

对于那些对此命名空间有疑问的人,您应该了解它确实是 .NET,而且它不会去任何地方

作为记录,该MonthName函数在内部调用以下...

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName
于 2010-01-19T16:57:03.647 回答
2

我会寻找这样的东西来编码,因为

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

里面有这个神奇的数字 1。然而

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

是自我记录的

于 2010-01-19T16:38:25.450 回答
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
于 2010-12-14T21:05:30.423 回答
1

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

于 2009-05-22T19:28:07.703 回答
0

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

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

这将返回完整的月份名称(一月、二月等)。用于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。

于 2012-11-15T00:34:19.400 回答
0

[0 - 11] var MonthNames = new List<string>(DateTimeFormatInfo.CurrentInfo.MonthNames);

于 2021-11-02T12:36:28.347 回答