C# 在.NET库中是否有月份的预定义枚举?
我想看看在.net框架中是否有几个月的官方统计 对我来说,似乎有一种可能,因为月份的使用是多么普遍,而且在.net框架中还有其他类似的枚举 例如,有一个星期中天数的枚举System.DayOfWeek,包括星期一、星期二等 我想知道一年中的月份是否有一个,即一月、二月等C# 在.NET库中是否有月份的预定义枚举?,c#,.net,datetime,enumeration,C#,.net,Datetime,Enumeration,我想看看在.net框架中是否有几个月的官方统计 对我来说,似乎有一种可能,因为月份的使用是多么普遍,而且在.net框架中还有其他类似的枚举 例如,有一个星期中天数的枚举System.DayOfWeek,包括星期一、星期二等 我想知道一年中的月份是否有一个,即一月、二月等 有人知道吗?不,没有。没有,但是如果您想知道月份的名称,可以使用: CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName (DateTime.Now.Month); 它将
有人知道吗?不,没有。没有,但是如果您想知道月份的名称,可以使用:
CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName (DateTime.Now.Month);
它将返回字符串表示形式(在本例中为当前月份)。请注意,
GetMonth
接受从1到13的参数-一月是1,13是一个空白字符串。我不确定,但我的直觉是否定的。
DateTime.Month返回一个整数。如果有这样一个枚举,它可能会被DateTime返回。您到底想实现什么 如果您只需要12个字符串,其中列出了一年中的月份,那么这可以通过自定义格式字符串获得-应用于datetime的任何实例
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之间的整数 在此命名空间的枚举“MonthNameType”中找到一个:
Microsoft.ServiceModel.Channel.Mail.ExchangeWebService.Exchange2007
位置有点吓人,但它仍然在那里。我会寻找类似这样的东西来编写代码,比如
if (DateTime.Now.Month != 1) // can't run this test in January.
里面有一个神奇的数字1。鉴于
if (DateTime.Now.Month != DateTime.MonthsOfYear.January)
是的,当然有。它是Microsoft.VisualBasic命名空间的一部分
Microsoft.VisualBasic.MonthName
对于那些对此名称空间有问题的人,您应该理解这一点
作为记录,MonthName
函数在内部调用以下函数
Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName
有些日历确实有超过12个月的时间:但我不能说这是否是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
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 });
string monthName=(new DateTime(2000,mnthNum,1)).ToString("MMMM");
List monthNames=DateTimeFormatInfo.CurrentInfo.monthNames.Take(12.ToList();
var monthselect=monthNames。选择(
m=>new{Id=monthNames.IndexOf(m)+1,Name=m});
我想看看是否有
官方统计的月份数
.net框架
没有
这是我早些时候准备的。(C版本)
枚举非常有用,但您可以使用以下格式获得所需的结果:
DateTime myDateTimeObject=DateTime.Now; //(for example)
string monthName = myDateTimeObject.ToString("MMMM");
这将返回完整的月份名称(一月、二月等)。使用myDateTimeObject.ToString(“MMM”)作为短名称(一月、二月、三月等)
如果您有一个特定的月号,mnthNum
,而没有任何日期时间
,那么您可以始终使用如下内容:
List<string> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.Take(12).ToList();
var monthSelectList = monthNames.Select(
m => new { Id = monthNames.IndexOf(m) + 1, Name = m });
string monthName=(new DateTime(2000,mnthNum,1)).ToString("MMMM");
或
但这似乎有点混乱。第一个示例要求
mnthNum
介于1和12之间。第二个示例允许(几乎)任何月数,并且不限于1到12。这不是枚举。谢谢,有趣的答案,不是我想要的,但仍然值得一个+!我同意文化特定的问题,但是为什么微软要创建DayOfWeek,这是文化特定的。有趣吧?也许是因为不同的文化有不同的月历,但是(显然)没有一个月历每周的天数不同。因此,每周的天数是一致的,即使名称不一致。如果你是一个文化敏感、时间旅行的程序员,请注意,有些文化有小数周(如法国革命)。谢谢你的回答,我只是好奇是否有官方的列举,因为我将要创建一个枚举,我只想知道是否已经存在一个枚举,所以我不会重新定义不需要的枚举。没有问题,没有(如果您创建了一个枚举,我会使整数值显式,您可以确保它们与.Net用于表示月数的1-12值相同)我会给你正确的答案,但我不认为这是基本库.net框架的一部分+1表示努力和创造力。它似乎是.NET3.5的一部分。只要在VisualStudio中打开object viewer并搜索“一月”,API中的匹配项就会出现。是的,我按照您的建议做了,它看起来在v3.0文件夹中,并且不是默认库。所以,虽然我猜它在图书馆里,但它的位置并不理想。就问题的要求而言,这是一个灰色地带。+1肯定是努力的结果。我们在这里谈论的是什么dll?关于Microsoft.VisualBasic.MonthName呢?您提供了多么有用的答案。也许一些额外的指导会更合适。@guillegr123您如何建议我开始证明否定?也许它不能证明否定,但一点推理也不会错:没有枚举,因为枚举无法本地化。一月份对一个俄罗斯程序员来说几乎没有意义。通过查看确实提供月份名称的函数,可以进一步支持这一点——它们位于区域性对象上。Upvoting可以抵消10次反对票,这是该问题唯一的实际答案。在.NET中有官方的月份统计吗?不,没有。这没有什么意义,因为不是每个日历都有相同的月数,这也许就是为什么它从未被引入的原因。但这不是重点。有吗?否。问题回答正确。抱歉,此答案与前面的问题相同