我想看看 .net 框架中是否有月份的官方枚举。
在我看来,有可能存在一个,因为月份的使用非常普遍,而且 .net 框架中还有其他此类枚举。
例如,有一个星期几的枚举,System.DayOfWeek,其中包括星期一、星期二等..
我想知道一年中的月份是否有一个,即一月、二月等?
有人知道吗?
没有,但如果您想要月份名称,可以使用:
CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName (DateTime.Now.Month);
它将返回一个字符串表示形式(在本例中为当前月份)。请注意,
GetMonth
接受从 1 到 13 的参数 - 一月是 1,13 是空白字符串。
不,没有。
我想看看是否有 官方统计月份数 .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
}
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 });
在此命名空间的枚举“MonthNamesType”中找到一个: Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.Exchange2007
位置有点吓人,但它仍然在那里。
您到底想实现什么目标?
如果您想要的只是十二个字符串,并拼写出一年中的月份,那么可以通过自定义格式字符串获得 - 适用于日期时间的任何实例,
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 之间的整数...
是的,当然有。它是 Microsoft.VisualBasic 命名空间的一部分...
Microsoft.VisualBasic.MonthName
对于那些对这个命名空间有疑问的人,您应该明白它确实是.NET,而且它不会去任何地方。
郑重声明,
MonthName
函数在内部调用以下...
Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName
我会寻找类似的东西来编码,如
if (DateTime.Now.Month != 1) // can't run this test in January.
里面有这个神奇的数字1。而
if (DateTime.Now.Month != DateTime.MonthsOfYear.January)
是自我记录的
有些日历确实有超过 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
我不确定,但我的预感是不会。 DateTime.Month 返回一个整数。如果有这样的枚举,很可能会通过 DateTime 返回。
[0 - 11]
var MonthNames = new List<string>(DateTimeFormatInfo.CurrentInfo.MonthNames);
枚举会非常有用,但是您可以使用格式获得所需的结果:
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。