簡體   English   中英

.NET 庫中是否有預定義的 Month 枚舉?

[英]Is there a predefined enumeration for Month in the .NET library?

我想看看 .net 框架中是否有幾個月的官方枚舉。

在我看來,有一個是可能的,因為月的使用非常普遍,並且因為 .net 框架中還有其他這樣的枚舉。

例如,一周中的天數有一個枚舉 System.DayOfWeek,其中包括星期一、星期二等。

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

有人知道嗎?

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

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

這將返回一個字符串表示(在本例中為當前月份)。 請注意, GetMonth從1到13接受參數 - 1月是GetMonth是空字符串。

不,沒有。

我想查看.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

一些日歷確實有超過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

我會尋找像這樣的東西來編碼,如

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

這個神奇的數字是1。

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

是自我記錄的

我不確定,但我的預感不是。 DateTime.Month返回一個整數。 如果有這樣的枚舉,它可能會被DateTime返回。

枚舉會很有用,但您可以使用以下格式獲得所需的結果:

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

這將返回完整的月份名稱(1月,2月等)。 使用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。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM