Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET库中是否有月份的预定义枚举?_C#_.net_Datetime_Enumeration - Fatal编程技术网

C# 在.NET库中是否有月份的预定义枚举?

C# 在.NET库中是否有月份的预定义枚举?,c#,.net,datetime,enumeration,C#,.net,Datetime,Enumeration,我想看看在.net框架中是否有几个月的官方统计 对我来说,似乎有一种可能,因为月份的使用是多么普遍,而且在.net框架中还有其他类似的枚举 例如,有一个星期中天数的枚举System.DayOfWeek,包括星期一、星期二等 我想知道一年中的月份是否有一个,即一月、二月等 有人知道吗?不,没有。没有,但是如果您想知道月份的名称,可以使用: CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName (DateTime.Now.Month); 它将

我想看看在.net框架中是否有几个月的官方统计

对我来说,似乎有一种可能,因为月份的使用是多么普遍,而且在.net框架中还有其他类似的枚举

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

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


有人知道吗?

不,没有。

没有,但是如果您想知道月份的名称,可以使用:

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中有官方的月份统计吗?不,没有。这没有什么意义,因为不是每个日历都有相同的月数,这也许就是为什么它从未被引入的原因。但这不是重点。有吗?否。问题回答正确。抱歉,此答案与前面的问题相同