2013-03-01 63 views
0

我想通過在C#中傳遞日期來查找月份的工作日數。查找按月份的工作日

例如:如果我通過「2013年3月6日(2013年6月6日)」函數應該說明月的第一個星期三。 如果我通過「2013年3月1日(2013年3月1日)」功能應該說第一個星期五的月份。 如果我通過「2013年3月13日(2013年3月13日)」功能應該說月的第二個星期三。

我嘗試使用此功能,但其每月的週迴(即通過「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; 
     } 

請建議上如何獲得月份的週日數。

回答

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

這裏是同樣的方法,只是它返回一個字符串,如「第一」,「第二」,「第三」等,而不是簡單的INT。該序號代碼是基於samjudson的代碼對這個職位: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"; 
    } 
} 

最後,這將返回 「每月第二個星期三」:

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

這真的很簡單,我想。如果月份的日期爲17,則結果爲1,如果月份的日期爲814,則爲2,依此類推。因此:

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

這工作,因爲分工/的定義方式當操作數(被除數和除數)是整數,看到/ Operator (C# Reference)

相關問題