2013-03-01 3 views
0

C#으로 날짜를 전달하여 평일의 번호를 찾으려고합니다.날짜로 평일의 평일 찾기

예 : '2013 년 3 월 6 일 (2013 년 3 월 6 일) '을 전달하면 함수가 월의 첫 번째 수요일을 말합니다. "3/1/2013 (2013 년 1 월 3 일)"을 전달하면 함수가 월의 첫 번째 금요일을 말해야합니다. "2012 년 3 월 13 일 (2013 년 3 월 13 일)"에 전달하면 함수에서 월 2 번째 수요일을 말합니다.

나는이 기능을 사용하려고했지만, 그것 (즉, 통과 "2013년 3월 6일 (6 월 2013)"를 반환 2) 달의 주를 반환 :

public static int GetWeekOfMonth(DateTime date) 
     { 
      DateTime beginningOfMonth = new DateTime(date.Year, date.Month, 1); 

      while (date.Date.AddDays(1).DayOfWeek != CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek) 
       date = date.AddDays(1); 

      return (int)Math.Truncate((double)date.Subtract(beginningOfMonth).TotalDays/7f) + 1; 
     } 

에 제안하십시오 달의 평일의 숫자를 얻는 방법. 만 대신 간단한의 등, "2", "3", 예 : "1"로 문자열을 반환 여기

public static int GetWeekOfMonth(DateTime dateTime) 
{ 
    DayOfWeek dayOfWeek = dateTime.DayOfWeek; 
    DateTime dayStep = new DateTime(dateTime.Year, dateTime.Month, 1); 
    int returnValue = 0; 

    while (dayStep <= dateTime) 
    { 
     if (dayStep.DayOfWeek == dayOfWeek) 
     { 
      returnValue++; 
     } 

     dayStep = dayStep.AddDays(1); 
    } 

    return returnValue; 
} 

이 같은 방법 : 여기

답변

1

내가 진짜 빨리 함께 던졌다 뭔가 INT. Is there an easy way to create ordinals in C#?

public static string GetWeekOfMonth(DateTime dateTime) 
{ 
    DayOfWeek dayOfWeek = dateTime.DayOfWeek; 
    DateTime dayStep = new DateTime(dateTime.Year, dateTime.Month, 1); 
    int returnValue = 0; 

    while (dayStep <= dateTime) 
    { 
     if (dayStep.DayOfWeek == dayOfWeek) 
     { 
      returnValue++; 
     } 

     dayStep = dayStep.AddDays(1); 
    } 

    switch (returnValue % 100) 
    { 
     case 11: 
     case 12: 
     case 13: 
      return returnValue.ToString() + "th"; 
    } 

    switch (returnValue % 10) 
    { 
     case 1: 
      return returnValue.ToString() + "st"; 
     case 2: 
      return returnValue.ToString() + "nd"; 
     case 3: 
      return returnValue.ToString() + "rd"; 
     default: 
      return returnValue.ToString() + "th"; 
    } 
} 

을 그리고 마지막으로,이 "매월 둘째 수요일"반환합니다 : 서수 코드는이 게시물에 samjudson의 코드를 기반으로

DateTime dt = DateTime.Parse("2013-03-13"); 
string dateString = string.Format("{0} {1} of month", GetWeekOfMonth(dt), dt.ToString("dddd")); 
1
public static int GetWeekOfMonth(DateTime date) 
{ 
    var weekDay = date.DayOfWeek; 
    var nth = date.Day/7; 
    if (date.Day % 7 > 0) 
    { 
    nth++; 
    } 
    return nth; 
} 

편집 : var weekDay...입니다 실제로 필요하지 않습니다.

1

정말 간단합니다. 월 중 일이 1에서 7 인 경우 결과는 이고, 해당 월의 일이 8에서 14이면 2입니다. 따라서 :

public static int GetWeekOfMonth(DateTime date) 
{ 
    return (date.Day + 6)/7; 
} 

피연산자 (피제수와 제수) 정수 경우이 때문에 분할 / 정의되는 방식 작동 / Operator (C# Reference) 참조.