web-dev-qa-db-ja.com

.NETライブラリにMonthの定義済み列挙はありますか?

.netフレームワークに数か月間の公式の列挙があるかどうかを確認しています。

月の使用がどれほど一般的であるか、および.netフレームワークにはそのような列挙が他にもあるため、1つある可能性があります。

たとえば、月曜日、火曜日などを含むSystem.DayOfWeekの曜日の列挙があります。

年の月、つまり1月、2月などに1つあるのだろうか?

誰か知っていますか?

95
Mark Rogers

ありませんが、月の名前が必要な場合は使用できます:

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

(この場合、現在の月の)文字列表現を返します。 GetMonthは1から13までの引数を取ることに注意してください。1月は1、13は空の文字列です。

113
Andy Mikula

いいえ、ありません。

72
David Nelson

.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
}
36
wal

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 });
31
Doug Lampe

この名前空間の列挙型 "MonthNamesType"に1つ見つかりました:Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.Exchange2007

場所はちょっと怖いですが、それでもそこにあります。

12
vidalsasoon

正確に何を達成しようとしていますか?

12の文字列で年の月が綴られている場合は、カスタム形式の文字列を介して利用できます-日時のインスタンスに適用され、

  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の整数を返します...

9
Charles Bretana

はい、確かにあります。これは、Microsoft.VisualBasic名前空間の一部です...

Microsoft.VisualBasic.MonthName

そして、この名前空間に問題がある人は、 本当に.NETであり、どこにも行きません であることを理解する必要があります。

レコードの場合、MonthName関数は内部的に以下を呼び出します...

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName
3
Josh Stodola

一部のカレンダーには実際に12か月以上あります: http://en.wikipedia.org/wiki/Month

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
2
Francois Gagnon

確かにわかりませんが、私の予感はありません。 DateTime.Monthは整数を返します。そのような列挙があった場合、おそらくDateTimeによって返されます。

1

私はこのようにコーディングするものを探しています

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

この魔法の数は1です。一方、

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

自己文書化

1
Jadawin

列挙型はかなり便利ですが、次の形式で目的の結果を得ることができます。

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

これは、完全な月名(1月、2月など)を返します。短い名前(Jan、Feb、Marなど)にはmyDateTimeObject.ToString("MMM")を使用します。

特定の月番号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である必要があります。2番目の例では、(ほぼ)任意の月数を使用でき、1〜12に制限されません。

0
keith