.NET 라이브러리에 월에 대한 미리 정의 된 열거가 있습니까?


97

.net 프레임 워크에 몇 달 동안 공식 열거가 있는지 확인하고 있습니다.

월 사용이 얼마나 흔한 지, 그리고 .net 프레임 워크에 다른 열거가 있기 때문에 하나가있는 것 같습니다.

예를 들어, 월요일, 화요일 등을 포함하는 요일에 대한 열거 형 System.DayOfWeek가 있습니다.

1 년 중 1 월, 2 월 등 몇 달 동안 하나가 있는지 궁금합니다.

아는 사람 있나요?

답변:


118

그렇지는 않지만 월 이름을 원한다면 다음을 사용할 수 있습니다.

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

문자열 표현 (이 경우 이번 달)을 반환합니다. 주 GetMonth1 13에서 인수를 - 1 월 1 일, 13은 빈 문자열입니다.


11
그래도 열거 형이 아닙니다.
Scott Wisniewski

3
감사합니다, 흥미로운 답변입니다. 제가 찾던 것이 아니라 여전히 + 가치가 있습니다!
Mark Rogers

4
문화 별 문제에 대해 동의하지만 Microsoft가 DayOfWeek를 만든 이유는 문화별로 다릅니다. 웃기죠?
Mark Rogers

12
아마도 문화마다 월별 달력이 다르지만 (분명히) 주당 일수가 다른 문화는 없기 때문일 것입니다. 그렇게 주 일의 일관성있는 경우에도 이름이 없습니다.
Ryan Lundy

11
당신이 문화적으로 민감한, 시간 여행 프로그래머 인 경우, 소수 주 한 문화가 있었다 알고 있어야 (예 : 혁명 프랑스) en.wikipedia.org/wiki/Decimal_calendar
마태 복음 잠금

75

아니, 없습니다.


3
어때 Microsoft.VisualBasic.MonthName?
Josh Stodola

14
당신이 제공 한 유용한 답변입니다. 아마도 몇 가지 추가 지침이 더 적절했을 것입니다.
Michael Eakins 2012 년

13
@ guillegr123 부정적인 것을 증명하는 방법을 제안 하시겠습니까?
David Nelson

7
아마도 그것은 부정적인 것을 증명하지 못하지만, 약간의 추론은 순서가 어긋나지 않을 것입니다. 열거 형을 지역화 할 수 없기 때문에 열거 형이 없습니다. Months.January는 러시아 프로그래머에게 아무런 의미가 없을 것입니다. 월 이름을 제공하는 함수를 살펴보면 추가로 지원됩니다.이 함수는 Culture 개체에 있습니다.
Sam Axe

8
이 질문에 대한 유일한 실제 답변에 대해 10 개의 반대표에 대응하기 위해 찬성합니다. .NET에 몇 달 동안 공식적인 열거가 있습니까? 아니, 없습니다. 모든 달력의 월 수가 같지 않기 때문에 이해가되지 않을 것입니다. 이것이 아마도 소개 된 적이없는 이유 일 것입니다. 그러나 그것은 여기서 중요한 것이 아닙니다. 하나있어? 아니요. 질문에 올바르게 답변했습니다.
sm

39

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

왜 사용 NotSet합니까? 왜 시작하지 January = 1않습니까? 당신은 너무 할당의 나머지 부분과 멀리 할 수있는 ...
Tersosauros

1
@Tersosauros January는 예를 들어 클래스의 속성으로 사용되는 경우 기본값이되기 때문 입니다. 대부분의 경우 나는 그것을 원하지 않습니다. 명시 적으로 할당되기 전에 'null'값을 갖기를 원합니다
wal

1
그러나 @wal, 'null'값을 원한다면 열거 형을 nullable로 사용해야합니다. 수업에서 공개 월을 사용하십니까? 월 {get; 세트; }.
oteal

7
@Tersosauros는 명시 적으로 정의되지 않은 경우에도 0이 항상 열거 형의 기본값이된다는 점에 유의합니다. 경우 NotSet생략된다 January = 1(나머지 값이 3, 2 등이있다)를이 enum의 기본 것(Month)0
tsemer

같은 것을 게시하러 왔어요 ..이게 답 이겠네요. Enum은 모든 DateTime 함수에 대해 사용할 수 있습니다. 즉 DateTime.Now.Month == (int) Month.January
Sonic Soul

32

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 });

1
return Enumerable.Range (0, 11) .Select (m => new {Id = 월 + 1, Name = DateTimeFormatInfo.CurrentInfo.MonthNames [month]});
Keith Harrison

var months = Enumerable.Range(0, 11).Select(m => new KeyValuePair<int, string>(m + 1, DateTimeFormatInfo.CurrentInfo.MonthNames[m]));
Dan Diplo

13

이 네임 스페이스의 "MonthNamesType"열거 형에서 Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.Exchange2007을 찾았습니다.

위치는 다소 무섭지 만 그럼에도 불구하고 거기에 있습니다.


나는 당신에게 정답을 주겠지 만 그것이 기본 라이브러리 .net 프레임 워크의 일부라고 생각하지 않습니다. 노력과 창의력에 +1.
Mark Rogers

.net 3.5의 일부인 것 같습니다. Visual Studio에서 개체 뷰어를 열고 "1 월"을 검색하면 API에서 일치하는 항목이 나타납니다.
vidalsasoon

네, 제안한대로했습니다. v3.0 폴더에있는 것처럼 보이며 기본 라이브러리가 아닙니다. 그래서 나는 그것이 도서관에 있다고 생각하지만 그 위치는 이상적이지 않습니다. 질문의 요구 사항만큼 회색 영역에 있습니다.
Mark Rogers

+1은 확실히 노력할 것입니다. 여기서 우리가 말하는 dll은 무엇입니까?
indolentdeveloper

10

정확히 무엇을 성취하려고합니까?

원하는 모든 것이 연중 월이 표시된 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까지의 정수를 반환합니다.


1
귀하의 답변에 감사드립니다. 공식 열거가 있는지 궁금합니다. 곧 만들려고하는데 이미 존재하는 것이 있는지 알고 싶기 때문에 불필요한 열거를 재정의하지 않습니다. .
Mark Rogers

1
afaik 없음, 없음, (만들면 정수 값을 명시 적으로 지정하므로 .Net에서 monthNumbers를 나타내는 데 사용하는 1-12 값과 동일한 지 확인할 수 있습니다)
Charles Bretana

3

네, 확실히 있습니다. Microsoft.VisualBasic 네임 스페이스의 일부입니다.

Microsoft.VisualBasic.MonthName

그리고이 네임 스페이스에 문제가있는 분들은 이것이 진정으로 .NET이고 아무데도 가지 않을 것임을 이해해야합니다. .

레코드를 위해 MonthName함수는 내부적으로 다음을 호출합니다.

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName

1
죄송하지만이 답변은이 질문의 주제 인 열거가 아니라는 점에서 이전 답변과 동일한 문제가 있습니다. 그래도 정보 감사합니다.
Mark Rogers

@Mark : System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthNames는 IEnumerable 인 문자열 []입니다.
user169771 2015-08-04

1
@ user169771-string []은 IEnumerable이지만 enumeration 은 아닙니다 . 그래서 작동하지 않습니다.
Mark Rogers

2

일부 캘린더에는 실제로 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

1

확실하지는 않지만 직감은 아닙니다. DateTime.Month는 정수를 반환합니다. 그러한 열거가 있다면 아마도 DateTime에 의해 반환 될 것입니다.


1

나는 다음과 같이 코딩하기 위해 이와 같은 것을 찾고있을 것입니다.

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

매직 넘버가 1입니다. 이므로

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

자가 문서화


0

열거 형은 다소 유용하지만 다음 형식으로 원하는 결과를 얻을 수 있습니다.

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

그러면 전체 월 이름 (1 월, 2 월 등)이 반환됩니다. 사용 myDateTimeObject.ToString("MMM")짧은 이름 (1 월, 2 월, 3 월, 등).

특정 월 번호가있는 경우 mnthNum,이없는 경우 DateTime항상 다음과 같이 사용할 수 있습니다.

string monthName=(new DateTime(2000,mnthNum,1)).ToString("MMMM");

또는

string monthName=((new DateTime(2000,1,1)).AddMonths(mnthNum-1)ToString("MMMM");

그러나 그것은 약간 지저분 해 보입니다. 첫 번째 예는 mnthNum1에서 12 사이 여야합니다. 두 번째 예에서는 (거의) 모든 월 번호를 허용하며 1에서 12로 제한되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.