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

Mar*_*ers 95 .net c# datetime enumeration

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

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

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

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

有人知道吗?

And*_*ula 116

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

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName (DateTime.Now.Month);
Run Code Online (Sandbox Code Playgroud)

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

  • 也许是因为不同的文化有不同的月历,但(显然)不是每周都有不同天数的日历.因此,即使*名称*不是,每周的*数*天也是一致的. (12认同)
  • 如果你是一个文化敏感的,时间旅行的程序员,请注意有文化的小数周(例如革命法国)http://en.wikipedia.org/wiki/Decimal_calendar (11认同)
  • 这不是一个枚举. (10认同)
  • 我同意文化特定问题,但为什么微软会创建DayOfWeek,这是特定于文化的.好笑,对吧? (4认同)
  • 谢谢,有趣的回答,不是我想要的,但仍然值得+! (3认同)

Dav*_*son 72

不,没有.

  • @ guillegr123你怎么建议我去证明消极? (13认同)
  • 你提供了多么有用的答案.也许一些额外的指导会更合适. (12认同)
  • 也许它不能证明是消极的,但是一点推理不会出现故障:没有枚举,因为枚举不能被本地化.Months.January对俄罗斯程序员来说几乎没有任何意义.通过查看提供月份名称的函数进一步支持这一点 - 它们位于Culture对象上. (7认同)
  • Upvoting抵消10个downvotes对这个问题的唯一实际答案.在.NET中有几个月的官方枚举吗?不,没有.这没什么意义,因为不是每个日历都有相同的月数,这也许就是为什么它从未被引入过.但这不是重点.有吗?问题问题回答正确. (6认同)
  • 那么`Microsoft.VisualBasic.MonthName`呢? (3认同)
  • @ guillegr123:lol我认为直接回答比迂回回答要好. (2认同)

wal*_*wal 36

我想查看.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
}
Run Code Online (Sandbox Code Playgroud)

  • @Tersosauros注意,0将始终是枚举的默认值,即使它没有明确定义.如果省略`NotSet`并且`January = 1`(其余值为2,3等),则此枚举的默认值为`(月)0 (5认同)
  • 但是@wal,如果你想要“null”值,你应该使用你的枚举作为可空值。在你的班级使用公共月吗?月{获取; 放; }。 (3认同)
  • @Tersosauros 因为它会默认为`January`,例如,如果它用作类的属性。在大多数情况下,我不希望那样,我希望它在显式分配之前具有“空”值 (2认同)

Dou*_*mpe 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 });
Run Code Online (Sandbox Code Playgroud)


vid*_*oon 12

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

这个位置有点吓人,但它仍然存在.


Cha*_*ana 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)
Run Code Online (Sandbox Code Playgroud)

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