0

我正在尝试通过在 C# 中传递日期来查找每月的工作日数。

例如:如果我通过“2013 年 3 月 6 日(2013 年 3 月 6 日)”,该函数应该显示每月的第一个星期三。如果我通过“2013 年 3 月 1 日(2013 年 3 月 1 日)”,该函数应该显示每月的第一个星期五。如果我通过“2013 年 3 月 13 日(2013 年 3 月 13 日)”,该函数应该显示每月的第二个星期三。

我试图使用这个函数,但它返回一个月的一周(即通过“3/6/2013(6-Mar-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;
        }

请建议如何获取每月的工作日数。

4

3 回答 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;
}

这是相同的方法,只是它返回一个字符串,例如“1st”、“2nd”、“3rd”等,而不是简单的 INT。序数代码基于 samjudson 在这篇文章中的代码:有一种简单的方法可以在 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"));
于 2013-03-01T05:50:38.537 回答
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...实际上不需要。

于 2013-03-01T06:03:04.140 回答
1

这真的很简单,我想。如果某月的某天是1through 7,则结果是1,如果某月的某日是8through 14,则结果是 ,2以此类推。所以:

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

这是因为/当操作数(除数和除数)是整数时定义除法的方式,请参阅/运算符(C# 参考)

于 2013-03-02T21:38:49.190 回答